プロトタイプ

5686 ワード

当初、JavaScriptにはクラスの概念がなかったため、既存のオブジェクトをコピーする方法で新しいオブジェクトを生成するプロトタイプベースの言語でした.
プロトタイプの原理は簡単です.各オブジェクトには独自のプロトタイプオブジェクトがあり、プロトタイプオブジェクトのプロトタイプを使用できます.さらに,このプロセスはプロトタイプリンクによって実現される.
var foo = {name : "foo"}; // foo 라는 객체를 생성.
foo.prototype.a='hello world';
console.log(foo.a);
このコードの結果出力エラー.
function foo(x) {
    this.x = x;
};

var A = new foo('hello'); 
console.log(A.x);
> hello

console.log(A.prototype.x)
> syntax error
対応するコードが表示されると、エラーも出力されます.
これは当然の結果だ.Prototype PropertyはConstructorが所有するPropertyです.また、propertyは関数オブジェクトのみにあります.
上記のコードのAオブジェクトは関数オブジェクトではありません.fooは、関数オブジェクトによって作成されたオブジェクトに拡張された単一のオブジェクトにすぎません.
つまり、AはPrototype Propertyを持っていないので、A.Prototypeです.xは構文エラーです.

上のコードは,new演算子を用いてAという関数を用いて,新しいオブジェクトBを変数に含むコードである.この2つの画面の__proto__constructorに注意してください.
また、関数オブジェクトを生成するとprototypeというオブジェクトが自動的に生成されます.(下図のように)
また,プロトタイプでもconstructorというオブジェクトが自動的に生成され,互いに参照できるようになる.

整理するなら。


Prototype Objectという新しいオブジェクトをクローンして作成します.プロトタイプがオブジェクトを作成するためのプロトタイプである場合、このプロトタイプオブジェクトはそのオブジェクト自体のブランチであり、プロトタイプとして作成された他のオブジェクトが参照するプロトタイプになります.すなわち,オブジェクト自体の他のオブジェクトをプロトタイプとして用いるオブジェクトがプロトタイプオブジェクトである.すなわち、上記の__proto__prototypeのリンクは、親から継承されたオブジェクトのプロトタイプに関する情報であり、prototype 프로퍼티は、自分がプロトタイプとして作成した新しいオブジェクト、すなわち子としての接続を継承する属性である.
  • __proto__-独自のオブジェクトを作成するプロトタイプに関連付けられた属性
  • constructor-作成者として、属性は独自のオブジェクトの作成に関連付けられます.
  • prototype-新しく作成されたプロトタイプオブジェクトに関連付けられた属性.
  • 1 prototype



    今まで内容を理解していたとしては初めてです.xはAのproperty xであり、例2はAに接続されたプロトタイプオブジェクトのxであることが理解される.では、なぜプロトタイプを使わなければならないのでしょうか.
  • 例1:B,CはAのprototype objectをプロトタイプとして用いた.また、このprototype objectは、Aを生成する際の情報のみを有するため、例1はhelloを出力する.
    したがって、A.xを変更してもAのprototype objectB、Cはhello
  • のみを参照する
  • 例2:結果がworldである理由も同様である.A.PrototypeはAのprototype objectA.Prototypeを引用したやつです.定義xはAのPrototype ObjectBを直接使用し、Cが知っているxはfunctions(){console.log("world");になります.
  • ダブルチェーン



    上記の例では、AのPrototypeオブジェクトのxメソッドを再定義すると、B、Cオブジェクトも影響を受けます.理由はPrototype Objectです.下の写真をよく見てください.
    プロトタイプ継承の構造理解が可能であると信じている.ここで注意したいのは、Prototypeオブジェクトが所有するConstructorです.A PrototypeオブジェクトのConstructorは、Aオブジェクトのコンストラクション関数です.すなわち、この方法で作成されたオブジェクトは、Aオブジェクトの作成時に持たないxメソッドを持つことができない.xは、A.Prototypeを使用してPrototypeオブジェクトに追加する方法です.ただし、このxメソッドは프로토타입 체인에 의한 공유しかし、Aオブジェクトに聖堂時xの方法や意味のあるプログラムの定義が含まれている場合、それらは共有ではなく継承されます.

    上記の例は、共有の下で継承と見なすことができる.
    このように共有と継承の区別を正しく理解し,使用することが重要である.なぜなら、彼らを分けて、後で原型に基づいて再定義すれば、望ましくない残酷な結果をもたらす可能性があるからだ.

    3.チェーン動作



    foo.country値にchinaが保存されている場合、Person.プロトタイプの国プロパティの変更ではなくfooオブジェクト上で国の値を動的に生成します.

    の最後の部分


    整理を除く.
    object.createとnewの違い
    中上俗についても気になりますが、後で時間があればアップします.