原型链一

默认原型链

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,如果是没有定义的话,这里应该会显示undefinednull是原型链的头。

总结

通过调试工具查看js对象的原型结构,当前对象的__proto__属性下的constructor属性的类型是当前对象的真实类型,那么当前对象的原型也就是构造函数类型.prototype。(p对象的真实类型是Person,所以p的原型就是Person.prototype)根据此结论往下推到,__proto__属性里的__proto__属性里的constructor属性类型也就是__proto__原型对象的真实类型,__proto__原型对象的原型对象也是构造函数.prototype。(__proto__对象的真实类型是Object__proto__的原型对象是Object.prototypeObject.prototype的原型对象是null,也就到头了。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理