原型链里最重要的属性就是prototype, prototype里存储了从上游拷贝而来的属性
Chrome里用proto表示prototype的指向,
比如说: X = new Y();
X对象的proto指向X对象的原型链上游Y, 再由Y的proto指向Y对象的原型链上游, 从而构成一条原型链条.
一:先看示例
|
|
二:New如何工作
下边代码模拟new的工作
第一步: 创建类的实例. 这步是把一个空的对象的 proto 属性设置为 F.prototype
第二步: 初始化实例. 函数 F 被传入参数并调用, 关键字 this 被设定为该实例
第三步: 立即执行, 返回实例
三:以下代码模拟了js引擎如何查找属性:
js里查找属性的规则也比较简单: 就是先在本对象中查找, 查不到沿原型链上溯
从上图能看出prototype和constructor是怎么循环引用的, 下面来说最开始碰到的问题
四:instanceof操作符
instanceof操作符检查后边的操作符, 是否在前边操作符的原型链上