你不知道的 JS 读书笔记(五)-- 原型[propotype]
文章目录
[[Prototype]] 链
|
|
调用
new Foo()时会创建a, 其中的一步就是给a一个内部的[[Prototype]]链接, 关联到Foo.prototype指向的那个对象。
constructor 属性
|
|
constructor 属性常被误解为指向构造函数,即这里的 Foo,实际上 a 本身并没有 constructor 属性,而是从 [[Prototype]] 链中找到该属性并返回的,验证如下
|
|
a1并没有constructor属性, 所以它会委托[[Prototype]]链上的Foo.prototype。 但是这个对象也没有constructor属性(不过默认的Foo.prototype对象有这个属性! ), 所以它会继续委托, 这次会委托给委托链顶端的Object.prototype。 这个对象有constructor属性, 指向内置的Object(..)函数。
小结
原型链的顶端是 Object.prototype, 如果在原型链中找不到指定的属性就会停止。 toString()、 valueOf() 和其他一些通用的功能都存在于 Object.prototype 对象上, 因此语言中所有的对象(除去通过 Object.create(null) 声明的对象)都可以使用它们。
文章作者 ryan
上次更新 2017-11-22