美文网首页
javascript的__proto__和prototype

javascript的__proto__和prototype

作者: jarod_chan | 来源:发表于2016-07-09 21:03 被阅读83次
    js.jpg
    javascript的所有一切的起源是null。以null为原型,产生了一切Object,包括函数也是Object。但是null本省不是Object,其它都是。
    任何一个Object都有一个__proto__指向自己构造函数的所对应的原型。
    当声明一个函数时,如
    function Foo(){}
    

    函数申明时,都会产生以自己命名的构造函数,并产生一个原型。每个函数都有自己的原型,如Foo.prototypejavascript内部定义的函数也都有自己的prototype,默认只有函数对象拥有该属性。并且该属性的值指向它对应的prototype

    Object->Object.prototype
    Number->Number.prototype
    Function->Function.prototype
    

    因为函数本省也是对象,所以函数也有自己的__proto__,他们都指向Function.propetype。因为他们是通过Function构造函数构造的。比如上述的Foo函数,就有

    Foo.__proto__===Function.protype;
    Foo.prototype===Foo.prototype;
    var foo1=new Foo();
    var foo2=new Foo();
    foo1.__proto__===foo2.__proto__;
    foo1.__proto__===Foo.prototype;
    

    任何一个函数的prototype都是一个Object。所以它们本身也有__proto__属性。
    总结以上内容,对于__proto__

    • 所有js对象都有__proto__
    • __proto__指向当前对象的构原型,也就是申明函数是产生的函数.prototype。(函数对象本身也符合这个规则,它的申明函数原型是Function.prototype)
    • 函数.prototype本身也是对象,所以它的__proto__也存在。所有非Object函数函数.prototype__proto__都是Object.prototype。而Object.prototype__proto__null

    相关文章

      网友评论

          本文标题:javascript的__proto__和prototype

          本文链接:https://www.haomeiwen.com/subject/kytdjttx.html