2-6 原型和原型链 - 5个原型规则
5条原型规则,原型规则是学习原型链的基础。
第一、所有引用类型(数组、函数、对象)都具有对象特性,即可以自由扩展属性。(除了null)可以添加各种属性值。

这里对象abj,arr,fn就可以一直扩展属性的。
第二、所有的引用类型(数组、函数、对象)都有一个(隐式原型)_proto_属性。属性值是一个普通对象。上面的6,7,8行,打印出来,就是一个普通对象。
第三、所有的函数,都有一个prototype(显式原型) 属性,属性值也是一个普通对象。
因为根据第一条,既然可以任意扩展属性,当然可以扩展显式原型属性和隐式原型属性。
第四、所有引用类型(数组,对象,函数),_proto_隐式原型属性指向它的构造函数的“prototype”属性值。12行。obj._proto_ 是对象obj的隐式原型,完全等于它的构造函数Object的显式原型属性。
第五、当试图得到一个对象的某个属性时候,如果这个对象本身没有这个属性,那么会去它的_proto_(也就是它构造函数的prototype)中寻找。

所有的函数有一个显式原型,显示原型又是对象,所以完全可以给显示原型添加属性。6行添加了一个属性。
10行,f就是一个普通对象,当然可以添加属性。
14行有本身这个属性。
15行自身没有定义这个属性,但是会去显式原型对象中去找。
网友评论