『Javascript権威ガイド』学習ノートの9:プロトタイプチェーン本質論
1832 ワード
各クラスには、プロトタイプの静的属性があります.この属性には、このクラスを識別するオブジェクトが含まれています.プロトタイプオブジェクトと呼ばれます.プロトタイプオブジェクトは内部属性の一部を定義し、一部の基質属性を含み、Javascript解釈エンジンはこのクラスの基質を知ることができる.同時に基質も同じ構成があるので、基質の基質を推断することができます.このようなチェーンはプロトタイプチェーンと呼ばれます.プロトタイプチェーンの最後はObjectのプロトタイプのオブジェクトで、プロトタイプの属性値はnullです.
一、内部属性
1、Prottotype属性:この類の親類の原型オブジェクトを表し、IE以外は、__u uプロト.属性アクセス.各JS内のクラスのProヘッダtype属性値はObjectであり、すべてObjectを直接継承するためである.注意プロトタイプ属性の頭文字と区別します.
2、クラス属性:クラス名を表し、文字列です.ECMA-622標準第5版に規定されているすべての内部にJavascript類を建設するクラスの属性値:
「Agments」「Aray」「Boolean」「Date」「Error」「Function」「JSON」「Math」「Number」「Object」「RegExp」「String」
例えば内装類Arayの原型オブジェクト定義:
{
Prototype:Objectの原型オブジェクト、
Class:「Aray」
)
二、_プロト.プロトタイプとの違い
1、prototypeは静的な属性であり、_u uプロト.は例示的な属性で、前者はクラスの原型オブジェクトで、後者はプロトタイプオブジェクトの内部属性Prottype属性値を表します.
2、各実例に一つずつあります.プロト.属性は、その構造方法を作成するためのプロトタイプ属性、すなわちプロトタイプオブジェクトを参照します.proto_==Aray.prototypeはtrueに戻ります.
3、ガクップロト.同じ名前の静的な属性があります.proto_,元のオブジェクトにも戻ります.でも、アルラ.ウproto_==Aray.prototypeはFALSEに戻りますが、静的な_u uを使うことは一般的に推奨されていません.proto_
三、プロトタイプチェーンを検査する
1、対象が指定されたオブジェクトのプロトタイプチェーンの中にあるかどうかを確認します.クラス名.プロトタイプpe.isProttypeOf(obj)-->objはチェックする対象の例です.プロトタイプチェーンがあるとTRUEに戻り、逆にFALSEに戻ります.
2、指定されたオブジェクトが特定の属性と方法を定義しているかどうかを確認する:obj.hasOwnProperty-->objはインスタンスオブジェクトですが、この方法はプロトタイプチェーンの方法と属性にアクセスできず、プロトタイプで代替できます.
hasOwnPropertyメソッドの場合、属性と方法はオブジェクト自体が定義しているメンバーでなければならないので、この方法はプロトタイプチェーンで継承される方法と属性をフィルタすることができます.
3、指定されたオブジェクトが特定の属性を定義しているかどうかを確認し、列挙できます.obj.propertyIs Enumerable.カスタム属性は列挙できます.内蔵属性はArayのlength属性のように列挙できません.変更方法はプロトタイプチェーンを検査しない.
一、内部属性
1、Prottotype属性:この類の親類の原型オブジェクトを表し、IE以外は、__u uプロト.属性アクセス.各JS内のクラスのProヘッダtype属性値はObjectであり、すべてObjectを直接継承するためである.注意プロトタイプ属性の頭文字と区別します.
2、クラス属性:クラス名を表し、文字列です.ECMA-622標準第5版に規定されているすべての内部にJavascript類を建設するクラスの属性値:
「Agments」「Aray」「Boolean」「Date」「Error」「Function」「JSON」「Math」「Number」「Object」「RegExp」「String」
例えば内装類Arayの原型オブジェクト定義:
{
Prototype:Objectの原型オブジェクト、
Class:「Aray」
)
二、_プロト.プロトタイプとの違い
1、prototypeは静的な属性であり、_u uプロト.は例示的な属性で、前者はクラスの原型オブジェクトで、後者はプロトタイプオブジェクトの内部属性Prottype属性値を表します.
2、各実例に一つずつあります.プロト.属性は、その構造方法を作成するためのプロトタイプ属性、すなわちプロトタイプオブジェクトを参照します.proto_==Aray.prototypeはtrueに戻ります.
3、ガクップロト.同じ名前の静的な属性があります.proto_,元のオブジェクトにも戻ります.でも、アルラ.ウproto_==Aray.prototypeはFALSEに戻りますが、静的な_u uを使うことは一般的に推奨されていません.proto_
三、プロトタイプチェーンを検査する
1、対象が指定されたオブジェクトのプロトタイプチェーンの中にあるかどうかを確認します.クラス名.プロトタイプpe.isProttypeOf(obj)-->objはチェックする対象の例です.プロトタイプチェーンがあるとTRUEに戻り、逆にFALSEに戻ります.
2、指定されたオブジェクトが特定の属性と方法を定義しているかどうかを確認する:obj.hasOwnProperty-->objはインスタンスオブジェクトですが、この方法はプロトタイプチェーンの方法と属性にアクセスできず、プロトタイプで代替できます.
var a = new Array();
alert(a.hasOwnProperty("join")); //false
alert(Array.prototype.hasOwnProperty("join")); //true
は、Arayのプロトタイプにおいて、join方法があり、以上は、異なる方法でアクセスした結果である.使用hasOwnPropertyメソッドの場合、属性と方法はオブジェクト自体が定義しているメンバーでなければならないので、この方法はプロトタイプチェーンで継承される方法と属性をフィルタすることができます.
3、指定されたオブジェクトが特定の属性を定義しているかどうかを確認し、列挙できます.obj.propertyIs Enumerable.カスタム属性は列挙できます.内蔵属性はArayのlength属性のように列挙できません.変更方法はプロトタイプチェーンを検査しない.