prototype、__proto__、constructor 的做用與區別

*如下全文用[[Prototype]]表明對象真正的原型鏈函數

  prototype__proto__的區別

  • __proto__是真正的原型鏈,也就是[[Prototype]],使用原型鏈時,查找對象的屬性是經過__proto__來查找,而不是prototype
    1. varFoo=function(){};
      Foo.__proto__.a ='b';
      Foo.prototype.a ='a';
      alert(Foo.a);//b
  • prototype只是用於構建用new關鍵字建立的對象,將構造器函數的prototype的引用指向於構建的對象的__proto__
    1. varFoo=function(){};
      var test =newFoo();
      alert(test.__proto__ ===Foo.prototype);//true
  • 構造器函數的prototype__proto__是不相同的,其protoype會被構建的對象的[[Prototype]]引用,其[[Prototype]]Function對象的[[Prototype]]Function對象的prototype__proto__是相同的
    1. varFoo=function(){};
      alert(Foo.prototype ===Foo.__proto__);//false
      alert(Function.__proto__ ===Foo.__proto__);//true
      alert(Function.__proto__ ===Function.prototype);//true

    constructor是什麼

    constructor也就是構造器函數的引用,一個構造器函數的prototypeconstructor也就等於這個構造器函數自己,一個構造器函數的__proto__constructor,也就是Functionconsturctor就等於Function自己
    1. varFoo=function(){};
      var test =newFoo();
      alert(Foo.constructor ===Function);//true
      alert(Foo.prototype.constructor === test.constructor);//true
      alert(Foo=== test.constructor);//true
      alert(Foo.constructor ===Foo.prototype.constructor);// false

    一個對象的構造過程

    1. Foo
       |_ protoype
            |_ consturctor  === Foo
            |_ __proto__ === Object.prototype
                |_ constuctor === Object
                |_ __proto__ === null
       |_ __proto__
           |_ __proto__ === Function.protoype
                |_ constuctor === Function
                     |_ __proto__ === Object.protoype
                         |_ consturctor === Object
                         |_ __proto__ === null
      test
          |_ __proto__ === Foo.protoype
              |_ constructor === Foo
              |_ __proto__ === Object.protoype
                  |_ constuctor === Object
                  |_ __proto__ === null
    只有函數對象纔有protoype屬性,Object.__proto__ === Function.__proto__Object.__proto__.contructor === Object

     enter image description here
  



相關文章
相關標籤/搜索