JavaScriptにおける構造関数とプロトタイプチェーンの関係の詳細

1344 ワード

Javascriptにはクラスの概念が存在しません.そのclass概念は構造関数とプロトタイプチェーンによって実現されます.
1.コンストラクタ:オブジェクト作成時の初期化対象は、常にnewキーと一緒に現れます.
コンストラクタには以下の特徴があります.
  • 1、コンストラクタ内のthisは、現在のインスタンスオブジェクトを指す.
  • 、newキーワードを用いて現在のオブジェクトを具体化する.
  • 、コンストラクタの頭文字は大文字で、普通の関数を区別します.
  • 、インスタンスオブジェクトは、構造関数内の属性および方法を継承することができる.ただし、同じオブジェクトのインスタンスの間では属性を共有できません.
  • 2.原型(prototype):オブジェクトの属性継承を実現します.javascriptの対象はプロトによってプロトタイプのオブジェクトを指し、Object._u uプロト.訪問します
    3.構造関数と原型との連絡:
    
     
      function Demo(){
           
       }
       var demo = new Demo()
       var data= demo.prototype = function(){
     
       }
       
       console.log(demo.__proto__)
       console.log(data.constructor )
       console.log(data.prototype.__proto__)
       console.log(demo.constructor.prototype)
       console.log(demo.constructor)
        :
      {constructor: ƒ}constructor: ƒ Demo()__proto__: Object
      ƒ Function() { [native code] }
      {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
      {constructor: ƒ}
      ƒ Demo(){  }
    
    以上の出力結果から、
    コンストラクタの_u uプロト.オブジェクトを指す;プロトタイプのconstructorは構造関数Functionを指します.プロトタイプのプロトタイプ.プロト.イコールObject.プロト.実例のconstructor.prototypeは原型を指します.実例のconstructorは構造関数を指します.
    引用凡例:
    ![14608155881][1]