徹底的にプロトタイプと__proto__を知ってもらいます

__ proto__オブジェクト固有の属性;プロトタイプは、機能固有のプロパティは静的プロパティ機能です。

関数自体は、オブジェクト、両プロトタイプ性の関数であるので、さらに__proto__性質を有しています。

関数プロトタイプのプロパティを使用する場合、それはコンストラクタとして使用されます。

関数は__proto__プロパティを使用する場合には、オブジェクトとして使用されます。

また、__ proto__プロパティ内部プロパティを、使用しないようにしてください。setPrototypeOf()とgetPrototypeOf()に置き換えてもよいです。

1)通常の関数の値であります

    関数C(){} 
    はconsole.log(C.prototype); 
    / * {コンストラクタ:関数C(){}、__ proto__:オブジェクト} * / 
    // __proto__、通常の関数オブジェクトを使用して、プロトタイプオブジェクト点目的球プロトタイププロパティ 
    はconsole.log(C .__ proto__ === Function.prototype) 。

通常の関数の場合は、プロパティと属性が読み書きされ__proto__プロパティをプロトタイプです。

プロトタイプに割り当てられ、コンストラクタ関数上記のプロトタイプオブジェクトを変更します。

    関数C(){}
     関数D(){} 
    C.prototype = 新しいD(); 
    console.log(Object.getOwnPropertyDescriptor(C、 'プロトタイプ' ));
    / * 
    {値:D、書き込み可能:真、列挙:偽、設定:偽} //可写
     * / 
    はconsole.log(C.prototype.constructor === D)。// 

2)クラス分類値、それぞれ、通常の機能

  クラスA {} 
  はconsole.log(A.prototype)。
  // {コンストラクタ:ƒ、__proto__:オブジェクト} 
  はconsole.log(A .__ proto__ === Function.prototype)。// 

しかし、このクラスでは、prototypeプロパティは読み取り専用です

  クラスA {} 
  クラスB { 
    追加(){にconsole.log( '追加' )} 
    静的アド(){にconsole.log( '静的追加' )} 
  } 
  のconst A = 新しいA(); 
  CONST B = 新しいB(); 
  console.log(Object.getOwnPropertyDescriptor(A、 'プロトタイプ' ));
  // {値:{...}、書き込み可能:偽、列挙:偽、設定:偽}; //只读 
  .__ proto__ = B。// 静态属性方法继承 
  b.add(); // 追加
  // a.add(); ❌不存在 
  A.add()。// 静的アドオン 
  A.prototype .__ proto__ = B.prototype。// プロパティメソッドは継承された例 
  a.add(); // 追加

 

おすすめ

転載: www.cnblogs.com/lyraLee/p/11617712.html