美文网首页我爱编程
js里面的原型与原型链

js里面的原型与原型链

作者: lvzhiyi | 来源:发表于2018-05-17 23:17 被阅读0次

原型与原型链算是js里面的一个老生常谈的问题,面试的中奖率也是很高,他到底是个什么鬼

原型是什么?原型有什么作用?

   const am1 = { 
         name : 'dog',
         sea  : function(){{ console.log(this.name) }},
         run  :  function(){{ console.log(this.name) }}
   }
   const am2 = { 
         name : 'cat',
         sea  :  function(){{ console.log(this.name) }},
         run  :  function(){{ console.log(this.name) }}
   }
   ……
   ……
   ……

首先js里面万物皆对象,对象的分为静态属性和原型属性(实例属性);上面对象里面的name等属性都是对应对象的静态属性;每个对象都含有toString()等方法实例属性,上面对象都是 Object的实例,相当于const am1 = new Object({name:'dog',……})

上面创建的对象都含有相同的方法函数,方法函数的代码没有形成共用,并且所有的对象各占各的内存;为了更节约内存和代码的复用,我们引入prototype优化一下

   Object.prototype.sea =  function(){{ console.log(this.name) }};
   Object.prototype.run =  function(){{ console.log(this.name) }};
   const am1 = {
         name : 'dog'
   }
   am1.sea()  //'dog'

现在不管创建多少个对象,只需要new出来实例化就行了,sea run 两个函数始终是指向构造函数的 prototype 属性,共用一个内存;而prototype就是实例化对象的原型属性

原型链

原型有了,原型链可以通俗的理解成以原型连接起来的“链条”,而“链条”的连接点就是对象的__proto__属性;

  class A {
  }
  class B extends A {
  }
  console.log(A.__proto__=== Function.prototype, A.prototype.__proto__ === Object.prototype)
  console.log(B.__proto__=== A, B.prototype.__proto__ === A.prototype)

通过继承B继承了A的prototype属性,这里的B的prototype与A的prototype指向同一个内存;B.proto指向继承过来的构造函数类A,B.prototype.proto指向继承过来的A的prototype属性;

而处于原型链的顶端的是 Object.prototype.__proto__指向null

js规定__proto__指向对象的原型链引用,此例中

 B.prototype.__proto__ === A.prototype 
A.prototype.__proto__ === Object.prototype
Object.prototype.__proto__  === null

构成了所谓的原型链

这里class类为构造函数对象,子类的__proto__指向继承的父类;因此存在另外一条继承链

B.__proto__ === A
A.__proto__ === Function.prototype
Function.prototype.__proto__   === Object.prototype

相关文章

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • Javascript(三)之原型继承理解

    进阶路线 3 原型继承 3.1 优秀文章 最详尽的 JS 原型与原型链终极详解 一 最详尽的 JS 原型与原型链终...

  • js里面的原型与原型链

    原型与原型链算是js里面的一个老生常谈的问题,面试的中奖率也是很高,他到底是个什么鬼 原型是什么?原型有什么作用?...

  • web前端面试之js继承与原型链(码动未来)

    web前端面试之js继承与原型链(码动未来) 3.2.1、JavaScript原型,原型链 ? 有什么特点? 每个...

  • JS原型链

    1什么是JS原型链? 通过__proto__属性将对象与原型对象进行连接. 1.1 JS原型链的作用? 组成的一个...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • JS里的原型与原型链

    首先在我们一行代码也没写的时候,在js分到的内存中,数据区内存是什么样的呢? 浏览器会有一个全局变量window,...

网友评论

    本文标题:js里面的原型与原型链

    本文链接:https://www.haomeiwen.com/subject/bwgjdftx.html