プロトタイプ
5686 ワード
当初、JavaScriptにはクラスの概念がなかったため、既存のオブジェクトをコピーする方法で新しいオブジェクトを生成するプロトタイプベースの言語でした.
プロトタイプの原理は簡単です.各オブジェクトには独自のプロトタイプオブジェクトがあり、プロトタイプオブジェクトのプロトタイプを使用できます.さらに,このプロセスはプロトタイプリンクによって実現される.
これは当然の結果だ.Prototype PropertyはConstructorが所有するPropertyです.また、propertyは関数オブジェクトのみにあります.
上記のコードのAオブジェクトは関数オブジェクトではありません.fooは、関数オブジェクトによって作成されたオブジェクトに拡張された単一のオブジェクトにすぎません.
つまり、AはPrototype Propertyを持っていないので、A.Prototypeです.xは構文エラーです.
上のコードは,new演算子を用いてAという関数を用いて,新しいオブジェクトBを変数に含むコードである.この2つの画面の
また、関数オブジェクトを生成するとprototypeというオブジェクトが自動的に生成されます.(下図のように)
また,プロトタイプでもconstructorというオブジェクトが自動的に生成され,互いに参照できるようになる.
Prototype Objectという新しいオブジェクトをクローンして作成します.プロトタイプがオブジェクトを作成するためのプロトタイプである場合、このプロトタイプオブジェクトはそのオブジェクト自体のブランチであり、プロトタイプとして作成された他のオブジェクトが参照するプロトタイプになります.すなわち,オブジェクト自体の他のオブジェクトをプロトタイプとして用いるオブジェクトがプロトタイプオブジェクトである.すなわち、上記の
1 prototype
例1:B,CはAの
したがって、A.xを変更してもAの のみを参照する例2:結果がworldである理由も同様である.A.PrototypeはAの ダブルチェーン
プロトタイプの原理は簡単です.各オブジェクトには独自のプロトタイプオブジェクトがあり、プロトタイプオブジェクトのプロトタイプを使用できます.さらに,このプロセスはプロトタイプリンクによって実現される.
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であることが理解される.では、なぜプロトタイプを使わなければならないのでしょうか.
prototype object
をプロトタイプとして用いた.また、このprototype object
は、Aを生成する際の情報のみを有するため、例1はhelloを出力する.したがって、A.xを変更してもAの
prototype object
B、Cはhelloprototype object
A.Prototypeを引用したやつです.定義xはAのPrototype Object
Bを直接使用し、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の違い
中上俗についても気になりますが、後で時間があればアップします.
Reference
この問題について(プロトタイプ), 我々は、より多くの情報をここで見つけました
https://velog.io/@jma1020/프로토타입
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
foo.country値にchinaが保存されている場合、Person.プロトタイプの国プロパティの変更ではなくfooオブジェクト上で国の値を動的に生成します.
の最後の部分
整理を除く.
object.createとnewの違い
中上俗についても気になりますが、後で時間があればアップします.
Reference
この問題について(プロトタイプ), 我々は、より多くの情報をここで見つけました
https://velog.io/@jma1020/프로토타입
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(プロトタイプ), 我々は、より多くの情報をここで見つけました https://velog.io/@jma1020/프로토타입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol