プロトタイプ
8250 ワード
📚 Reference
呉勝煥、https://medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67
PoiemaWeb, https://poiemaweb.com/js-prototype
注意:これは個人がサイトで復習しやすいように再編成された文章です.
詳細については、リファレンスサイトにアクセスしてください.
緒論
JavaScriptは、Java、C++などのオブジェクトベースのオブジェクト向けプログラミング言語とは異なり、オブジェクトベースのオブジェクト向けプログラミング言語である(
class
).prototype
に基づく言語は、インスタンスの作成および継承概念の実装のために、オブジェクトの作成前のclass
を定義する.JavaScriptは、class
を必要とせずにオブジェクトを作成し、class
オブジェクトによって継承概念を実現します.ES 6は
prototype
構文を追加したが、これはプロトコルタイプに基づいて実装されていることを意味し、JavaScriptがクラスベースに変更されたことを意味しない.原型はどうやって使いますか?
JavaScriptでは、
class
演算子とコンストラクション関数の組み合わせで複数のオブジェクトを簡単に作成できます.ここで、コンストラクション関数は通常の関数と同じですが、オブジェクトを作成する大文字で始まる関数です.function Person() {
this.eyes = 2;
this.nose = 1;
};
const Tomas = new Person();
const James = new Person();
console.log(Tomas.eyes); // 2
console.log(Tomas.nose); // 1
console.log(James.eyes); // 2
console.log(James.nose); // 1
ここで問題が発生しました.new
とTomas
にはJames
とeyes
があり、メモリごとに4つのnose
とeyes
が割り当てられています.100個のオブジェクトを作成すると、200個の変数が割り当てられます.この問題は、プロトコル・タイプを使用して解決されます.function Person() {};
Person.prototype.eyes = 2;
Person.prototype.nose = 1;
const Tomas = new Person();
const James = new Person();
console.log(Tomas.eyes); // 2
console.log(Tomas.nose); // 1
console.log(James.eyes); // 2
console.log(James.nose); // 1
簡単に言えば、noes
という空のオブジェクトをメモリに割り当て、共通の使用のためにデータをオブジェクトに格納します.次に、Person.prototype
コンストラクタによって生成されたオブジェクトは、メモリ内のPerson()
オブジェクトを参照し、データを使用する.プロトタイプ運動原理
関数の作成
関数を作成すると、JavaScriptは関数だけでなくPrototypeオブジェクトも作成します.
Prototype Object
複数のオブジェクトが共有するデータを含むオブジェクト
上図では、生成関数の
Person.prototype
およびプロトタイプオブジェクトのprototype
およびconstructor
に注意してください.__proto__
作成時に一緒に作成されたPrototypeオブジェクトを参照します.このオブジェクトには関数オブジェクトのみが含まれます.prototype
Prototypeオブジェクトのみを持つPropertyとして、自分で作成した関数オブジェクトを参照します.constructor
コンストラクション関数を作成するPrototypeオブジェクトを参照します.このオブジェクトは、すべてのオブジェクト(関数を含む)が持つPropertyです.関数オブジェクトは__proto__
を指します.上図では、関数オブジェクトは実際に
Function.prototype
を含んでいるが、説明中は不要であるため省略する.__proto__
およびprototype
によって相互参照される.オブジェクトの作成
constructor
演算子とコンストラクション関数の組み合わせを使用してオブジェクトを作成します.作成されたオブジェクトは、new
属性で関数を作成したプロトタイプオブジェクトを参照し、プロトタイプオブジェクトのデータを使用できます.__proto__
演算子とコンストラクション関数の組み合わせを使用して別のオブジェクトを作成しても、上記の原理を使用して独自の関数を作成するプロトタイプオブジェクトを参照し、データを共有します.プロトタイプチェーン
生成されたPerson Prototypeオブジェクト(
new
コンストラクタなど)にも、その親コンストラクタが作成されます.これはネイティブオブジェクトのPerson()
コンストラクション関数であり、Person PrototypeオブジェクトのObject()
属性は__proto__
コンストラクション関数のObject Prototypeオブジェクトを参照します.オブジェクトプロトタイプオブジェクトは最上位レベルにあるため、Object()
プロパティは__proto__
を指します.null
属性によって親プロトタイプオブジェクトに関連付けられたシェイプをプロトタイプチェーンと呼びます.Reference
この問題について(プロトタイプ), 我々は、より多くの情報をここで見つけました https://velog.io/@gusdnr814/프로토타입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol