JavaScript:__proto__和prototype的关系

路线图

能够经过上述路线图来观察。函数

  • 函数和对象,都有一个__proto__属性,指向它们各自的原型prototype。注意到prototype也是一个对象,因此prototype也有__proto__属性,这样就构成了一个原型链,最高到达Object.prototype.__proto__===null为止。spa

  • 对于函数而言,它的__proto__指向Function.prototype。由于ObjectFunction自己也是函数,因此Function.__proto__、Object.__proto__、Cat.__proto__其实是彻底相同的,它们都指向同一个对象:Function.prototypeprototype

  • 所以,若是咱们有:Function.prototype.bark=function(){console.log("Wow!")},那么全部函数均可以按照原型链访问到该方法:Cat.bark()。注意不能写成Function.bark=....,不然须要经过:Cat.constructor.bark()来访问(Cat经过原型链在Functionprototype中找到了constructor,而它指向Function,从而能够引用barkcode

  • Cat这个自定义函数可知,当函数被编译建立时它就已经有了一个原型对象prototype。而这个原型对象prototype自己不等于Object.prototype,而是它的__proto__属性等于:Cat.prototype.__proto__===Object.prototype对象

  • 当咱们手动改变一个对象的原型时(即改变__proto__指向),注意constructor原型链

相关文章
相关标签/搜索