原型链一

77次阅读

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

总结

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

正文完
 0