共计 806 个字符,预计需要花费 3 分钟才能阅读完成。
默认原型链
function Person() {}
var p = new Person();
-
从
p
对象的原型对象__proto__
里可以看出,constructor
等于Person
,可以得出p
是由Person
这个构造函数创建出来的,并且p
继承自Person.prototype
原型,p.__proto__
与Person.prototype
指向的是同一个原型p.__proto__ === Person.prototype //true
-
原型也是一个对象,既然是对象就有原型,那么原型的原型是谁呢?由上面的截图可以看出:
__proto__:Object
是原型对象的原型,将其展开得到以下截图:p.__proto__.__proto__ === Object.prototype //true
-
Object.prototype
的原型对象是什么呢?通过调试工具可以得到答案 - 通过上面截图得知,原型对象是
null
,注意这里是null
,并不是undefined
,说明它是存在原型定义的,只是定义的值是null
,如果是没有定义的话,这里应该会显示undefined
。null
是原型链的头。
总结
通过调试工具查看 js
对象的原型结构,当前对象的 __proto__
属性下的 constructor
属性的类型是当前对象的真实类型,那么当前对象的原型也就是 构造函数类型.prototype
。(p
对象的真实类型是 Person
,所以p
的原型就是 Person.prototype
)根据此结论往下推到,__proto__
属性里的 __proto__
属性里的 constructor
属性类型也就是 __proto__
原型对象的真实类型,__proto__
原型对象的原型对象也是 构造函数.prototype
。(__proto__
对象的真实类型是 Object
,__proto__
的原型对象是 Object.prototype
)Object.prototype
的原型对象是null
,也就到头了。
正文完
发表至: javascript
2019-09-21