原型链
原型链
官方文档:
JavaScript是面向对象的,每个对象身上都有一个 __proto__ 属性,该属性指向它的原型对象,当对象在查找一个属性的时候,自身没有就根据 __proto__ 向它的原型进行查找,如果还没有,那么就顺着它原型的原型继续查找,直到 Object.prototype.__proto__ 为 null。这么一条用 __proto__ 串联起来的对象链状结构,就称之为原型链。每一个对象数据类型都有一条属于自己的原型链
指向关系如图:
注意:
只有函数才有 prototype 属性,对象没有
每个对象身上都有 __proto__ 属性
函数与对象的关系:函数拥有对象的所有能力,并且函数还拥有额外的技能:可被调用、拥有 prototype 属性等。
函数就是对象,它是 Function 类型的实例
我们为什么要把属性放到原型上?
如果我们放在构造函数中,那么每次 new 实例的时候,都会为这个属性分配内存空间;如果放在原型上,那么实例中就不用为这个属性分配空间了。
注意:虽然函数也是对象,也能直接往它上面添加属性,但函数的 name 属性是默认指向函数名的,所以不要添加 name,要添添其它的
相关链接:
这一路,灯火通明