[JS-Flow]プロトタイプ
5963 ワード
この文章はCore JavaScript特別講座の内容をまとめた.
整理する
ES 6以前はJavaScriptにクラスの概念はありませんでした.しかしjavascriptがオブジェクト向けの言語を使用できるのはprototypeがあるからです.
JAvascriptは正確にはプロトコルタイプに基づく言語です.
クラスがないので、機能を継承することはほとんどありません.だから原型をベースに、継承を真似て使います.
ちなみに、ES 6からClass構文が追加されていますが、JavaScriptがクラスベースに変更されるのではなく、構文が追加されています.
JavaScriptのすべての(すべてのタイプ)がオブジェクト(Object)を継承します.(原型で継承?)だからすべて客体です.あるいは客体のように使えます.
すべてのオブジェクトにプロトタイプ属性オブジェクトがあります.
ジェネレータのprototypeでオブジェクトを作成すると、すべてのインスタンスが共同で使用できます.
プロトタイプは、インスタンスで一般的なメソッドと変数を定義します.
+JavaScriptのタイプは、コンストラクション関数によって定義されます.x Array Number等
プロトタイプ
コンストラクション関数には、「プロトタイプ」という名前のオブジェクトがあります.
newキーワードとコンストラクション関数(Constructor)を使用してインスタンスを作成します.
インスタンスはまた、
__proto__
というオブジェクトを生成し、__proto__
は構造関数のプロトタイプを参照します.このとき
__proto__
は省略可能であり、直接インスタンスとしてコンストラクタのプロトタイプを参照する.CONSTRUCTOR.prototype
INSTANCE.__proto__
INSTANCE
Object.getPrototypeOf(INSTANCE)
プロトタイプアクセスジェネレータも使用できます.CONSTRUCTOR
CONSTRUCTOR.prototype.constructor
INSTANCE.__proto__.constructor
INSTANCE.constructor
(Object.getPrototypeOf(INSTANCE)).constructor
INSTANCE.변수
を使用する場合、まず構造関数に対応する変数があるかどうかを検索します.ない場合は、ジェネレータのプロトタイプで変数を検索して使用します.
コンストラクション関数とプロトタイプで同じ変数がそれぞれ宣言されている場合.
INSTANCE.변수
とINSTANCE.__proto__.변수
は価格が違います.INSTANCE.변수
は、コンストラクション関数で定義された変数を優先的に使用します.プロトタイプフィルタ
どのタイプの作成者にもプロトタイプが存在し、プロトタイプはオブジェクトです.
したがって、プロトタイプは再びオブジェクトのインスタンスであり、オブジェクトのプロトタイプと一致します.(
__proto__
は省略可能)したがって、オブジェクトのプロトタイプで定義されたメソッドを使用することができます.
オブジェクトのプロトタイプでオブジェクトでのみ使用する方法を定義すると、使用しない他のタイプが発生するため、オブジェクト作成者はオブジェクトでのみ使用できる関数を定義します.したがって,オブジェクト作成者定義から見ると定義は複雑である.
var arr = [1, 2, 3];
arr.toString = function() {
return this.join('_');
}
console.log(arr.toString()); // "1_2_3", 생서자의 정의에 의해
console.log(arr._proto_.toString()); // "1, 2, 3", 프로토타입의 정의에 의해
console.log(arr._proto_._proto_.toString()); //[object Array], 객체의 정의에 의해
Reference
この問題について([JS-Flow]プロトタイプ), 我々は、より多くの情報をここで見つけました https://velog.io/@younoah/JS-Flow-프로토타입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol