你不知道的 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