0
点赞
收藏
分享

微信扫一扫

JavaScript 原型及原型链

一:prototype属性

  1. 这是一个显式原型属性,只有函数才拥有该属性,基本上所有函数都有这个属性。
  2. prototype 如何产生
    当我们声明一个函数时,这个属性就自动被创建了
function Foo() { }

这个属性的值是一个对象(也就是原型),只有一个属性constructor

二:constructor属性

constructor 是一个公有且不可枚举的属性,constructor属性指向构造函数(即Foo())
作用:让实例知道是什么函数构造了它

总结:构造函数通过 prototype 属性指向原型,原型的 constructor属性指回构造函数

三:__proto__属性

  1. 每个JS对象都有__proto__属性,指向了创建该对象的构造函数的原型
  2. prototype 是内部属性,我们并不能访问到,所以使用_proto_来访问。通过_proto_将对象和原型联系起来组成原型链,得以让对象可以访问到不属于自己的属性
  3. 实例对象的_proto_ 如何产生的:当我们使用new 操作符时,生成的实例对象拥有了_proto_属性
    • Object.prototype.__proto__ === null
    • Object.__proto__ === Function.prototype
    • Function.__proto__ === Function.prototype
    • fn.__proto__ === Fn.prototype

四:原型链

  • 对象的__proto__属性指向原型,__proto__将对象和原型连接起来组成了原型链
  • 具体起来说就是:访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链

总结

  1. Object是所有对象的爸爸,所有对象都可以通过__proto__找到它
  2. Function是所有函数的爸爸,所有函数都可以通过__proto__找到它
  3. 函数的prototype是一个对象
  4. Function.prototypeObject.prototype 是两个特殊的对象,他们由引擎来创建
  5. 除了以上两个特殊对象,其他对象都是通过构造器new 出来的
  6. 对象的 __proto__指向原型,__proto__将对象和原型连接起来组成了原型链

参考资料:
深度解析原型中的各个难点

举报

相关推荐

0 条评论