1.はじめに
-
プロト(__プロト__)
同様の
java
言語では、継承の概念はクラス間で受け渡され、達成されますjavascript
が、クラスはなく、オブジェクトであるため、ではjavascript
、継承の概念はオブジェクトとオブジェクト実装の間で受け渡されます。javascript
スコープが参照データ型に限定される場合の継承を考慮して、参照データ型は分割されますFunction
が、Object
2種類ですが、継承の問題では、オブジェクトを統合できるのと同じように、区別はFunction
ありObject
ません。__proto__
そして、prototype
異なる、プロトタイプのみ機能であり、かつ__proto__
、その後Function
とObject
両方インチ JavaScriptは__proto__
、継承関係を決定するために使用されます。javascript
継承の本質:__proto__
オブジェクトAのプロパティが指すオブジェクトB。BはAのプロトタイプオブジェクト(または親オブジェクト)です。オブジェクトAはオブジェクトBのプロパティとメソッドを使用でき、プロトタイプオブジェクトCも使用できます。上記のプロパティとメソッドは、再帰的に、いわゆるプロトタイプチェーンです。var A = { name:'前端收割机'} var B = { age:18} var c = { hobby:'摄影'} A.__proto__ = B;//将B设置为A的父对象 B.__proto__ = C;//将C设置为B的父对象 console.log(A.name) //前端收割机 console.log(A.age) //18 console.log(A.hobby)//摄影
-
プロトタイプ
一つは
__proto__
継承の問題を実現します。それはそれをするべきprototype
ですか?prototype
実際、prototype
実際の作業はFunction
コンストラクターとしての時点で連続して進行してい__proto__
ます。これは、公式の標準で定義された属性ではないため、prototype
属性がクラスとクラスの間の継承パターンを模倣するのに役立ちます。new
関数がキーワードによって呼び出されると、コンストラクターが実行されます。コンストラクターは、インスタンスオブジェクトの作成を担当し、インスタンスオブジェクトの__proto__
プロパティをコンストラクターprototype
にポイントして、コンストラクターprototype
のすべてのプロパティとメソッドの継承を実装し、コンストラクターにthis
バインドします。インスタンスを作成し、関数本体を実行します。上の図から、
foo
オブジェクトとFoo
関数のプロトタイプチェーンを見つけることができます。1.
foo
オブジェクトプロトタイプチェーンfoo.__proto__ == Foo.prototype; foo.__proto__.__proto__ == Foo.prototype.__proto__ == Object.prototype; foo.__proto__.__proto__.__proto__ == Foo.prototype.__proto__.__proto__ == Object.prototype.__proto__ == null;
2.
Foo
コンストラクタープロトタイプチェーンFoo.__proto__ == Function.prototype; Foo.__proto__.__proto__ == Function.prototype.__proto__; Foo.__proto__.__proto__.__proto__ == Function.prototype.__proto__.__proto__ == Object.prototype.__proto__ == null;
コンストラクター
Foo
はプロトタイプチェーン上にないFoo.prototype
ためFoo.prototype
、プロパティとメソッドを継承することはできません。インスタンスfoo
のプロトタイプチェーンにはFoo.prototype
それfoo
があるためFoo.prototype
、プロパティとメソッドを継承できます。
第二に、役割
-
プロト(__プロト__):
- オブジェクト間の継承を実現し、プロトタイプチェーンを形成します。
- 子オブジェクトが親のプロパティとメソッドを使用できるようにします。
-
プロトタイプ:
- コンストラクターによってインスタンス化されたオブジェクトに、共通の属性とメソッドを見つけさせます(つまり
foo.__proto__ === Foo.prototype
)。 - 実装クラスとクラス間の継承パターンを模倣するため
Javascript
のprototype
プロパティの手段。
- コンストラクターによってインスタンス化されたオブジェクトに、共通の属性とメソッドを見つけさせます(つまり
3、まとめ
- プロト
(和
コンストラクタ属性)是**对象**所独有的;prototype
属性があるの機能機能もオブジェクトなので、また機能を有しているので、独特__proto__
およびconstructor
プロパティを。 __proto__
属性の機能は、オブジェクトの属性にアクセスしたときです。属性がオブジェクトに存在しない場合は、その__proto__
属性が指すオブジェクト(親オブジェクト)を検索し、属性__proto__
の最後まで検索を続けます。null
。子オブジェクトが親のプロパティとメソッドを使用できるようにします。prototype
ロールのプロパティは、共通のプロパティとメソッドを見つけることができる関数オブジェクトをインスタンス化することです。これは、実装クラスとクラスの間の継承パターンを模倣するプロパティのJavascript
手段ですprototype
。