ホームページ >ウェブフロントエンド >jsチュートリアル >jsのプロトタイプチェーンとは何ですか

jsのプロトタイプチェーンとは何ですか

anonymity
anonymityオリジナル
2019-05-29 10:59:244219ブラウズ

各コンストラクターにはプロトタイプ オブジェクトがあります。プロトタイプ オブジェクトにはコンストラクターへのポインターが含まれ、インスタンスにはプロトタイプ オブジェクトの内部へのポインターが含まれます。プロトタイプ オブジェクト (1) のインスタンスを別のプロトタイプ オブジェクト (2) と等しくします。

この時点で、プロトタイプ オブジェクト (2) にはプロトタイプ オブジェクト (1) へのポインターが含まれます。

次に、プロトタイプ オブジェクト (2) のインスタンスをプロトタイプ オブジェクト (3) と等しくします。このレイヤーごとの進行により、インスタンスとプロトタイプのチェーンが形成されます。これがプロトタイプ チェーンの概念です。

jsのプロトタイプチェーンとは何ですか

プロトタイプ チェーン

各コンストラクターにはプロトタイプ オブジェクトがあり、各コンストラクター インスタンスにはプロトタイプ オブジェクトを指す内部ポインター (プロト) が含まれています。最初のコンストラクターのプロトタイプ オブジェクトが 2 番目のコンストラクターのインスタンスと等しい場合、最初のコンストラクターのプロトタイプ オブジェクトには 2 番目のプロトタイプ オブジェクトへのポインターが含まれ、3 番目のプロトタイプ オブジェクトは最初のコンストラクターのインスタンスと等しくなります。コンストラクターを作成し、最初のコンストラクターのプロトタイプ オブジェクトに 2 番目のプロトタイプ オブジェクトへのポインターが含まれるようにします。3 つのプロトタイプ オブジェクトには、最初のプロトタイプ オブジェクトへのポインターも含まれ、以下同様になります。これで、インスタンスのチェーンを形成するには十分です。プロトタイプ。これはプロトタイプ チェーンの基本概念です。

function One(){
 }
 function Two(){
 }
 function Three(){
 }
 Two.prototype=new One();
 Three.prototype=new Two();
 var three=new Three();
 console.log(three);
 console.log(three.__proto__===Three.prototype) //true
 console.log(three.__proto__.__proto__===Two.prototype) //true
 console.log(three.__proto__.__proto__.__proto__===One.prototype)  //true
 console.log(three.__proto__.__proto__.__proto__.__proto__===Object.prototype)  //true

オブジェクト インスタンスで、オブジェクト プロトタイプにアクセスするメソッドです。

1。proto 属性を使用します。

この属性はブラウザでサポートされている属性であり、ECMAScript

2 .Object.getPrototypeOf

3 の属性ではありません。constructor.prototype

のメソッドを使用します。 proto をサポートしていないブラウザの場合は、constructor を使用してオブジェクトのコンストラクターにアクセスし、prototype を使用してプロトタイプにアクセスできます

プロトタイプ チェーンを使用して ANUGLAR スコープを説明します

#開発中このプロセスでは、コントローラーがネストされている可能性があります。次のコードを見てください:

  <div ng-controller="OuterCtrl">
        <span>{{a}}</span>
         <div ng-controller="InnerCtrl">
            <span>{{a}}</span>
         </div>
     </div>
    <script>
    function OuterCtrl($scope) {
    $scope.a = 1;
    }
    function InnerCtrl($scope) {
    }
    </script>

インターフェイスには 2 つの 1 が表示され、OuterCtrl のスコープ内で変数を定義しただけですが、結果は次のとおりです。インターフェイスは、両方の a が値を持つというものです。これで、セルフ コントローラーの a は、親コントローラーから継承されます。ここで

親子スコープを 2 つのプロトタイプ オブジェクトとして考えることができます。そのうちの 1 つは、他のプロトタイプ オブジェクトのインスタンス

以上がjsのプロトタイプチェーンとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。