プロトタイプとプロトタイプチェーン

コンストラクタは、オブジェクトを作成します

======= ==========のは栗を見てみましょう

関数人(名){//コンストラクタthis.name =名;}

Person.prototype.printName =関数(){//プロトタイプオブジェクト
アラート(this.name);}
VAR =新しい新しいPERSON1人( '明'); //オブジェクトインスタンス
(PERSON1 .__ proto__)にconsole.logを; //自分の見て、より印象的な印刷
はconsole.log(person1.constructorを); //はconsole.log(Person.prototype); //
; VAR =新しい新PERSON2人( 'フランク')
の例(ここではケースに注意してください)の人PERSON1は、name属性が含まれていますが、また自動的に人のプロトタイプを指す__proto__属性を生成し、おそらくこのように、プロトタイプで定義されているのprintNameメソッドにアクセスすることができます。それぞれのJavaScript関数は、prototypeプロパティを持って、このプロパティがあるオブジェクト参照プロトタイプオブジェクトをプロトタイプオブジェクトの初期化時間が空で、我々はこれらのメソッドとプロパティがされるであろうプロパティとメソッドのいずれかをカスタマイズできるのコンストラクタ作成されたオブジェクトの継承を(次は、非常に暴力的なプロトタイプのより詳細な説明になります)

例としては、コンストラクタによって作成されます。プロパティコンストラクタ(コンストラクタ点)を有するように作成された例およびプロト特性(プロトタイプ物点)

コンストラクタは、prototypeプロパティを持って、このプロパティは、そのプロトタイプオブジェクトへのポインタです。

内部プロトタイプオブジェクトは、ポインタ(constructorプロパティ)向けコンストラクタ有する:Person.prototype.constructor =人数。

例としては、プロトタイプオブジェクトに定義されたプロパティとメソッドにアクセスすることができます。

ここでPERSON1とPERSON2のインスタンスである、プロトタイプは彼らのプロトタイプオブジェクトです。

// ======== ===========再び栗

関数アニマル(名){//コンストラクタ

this.name = name; //设置对象属性}

Animal.prototype.behavior =関数(){

console.log("this is a "+this.name);

}
VARの犬=新しい動物( "犬");
VAR猫=新しい動物( "猫");

Dog.behavior(); // Dogオブジェクトは、直接法による行動を呼び出します

Cat.behavior(); //"これは猫です"

console.log(Dog.behavior == Cat.behavior); //はtrue。

//概要:プロトタイプコンストラクタで定義されたメソッドは、オブジェクトを直接呼び出すために行うことができ、そしてコードが共有されています。動物のプロトタイプオブジェクトへのポイントを属性。

================= ==================トピックを開始

-1-プロトタイプ:

各関数は、プロパティの唯一の機能があり、prototypeプロパティを持っています。

関数人(){}

Person.prototype.nameは= '名前';

)(PERSON1 =新しい人でした。

)(PERSON2 =新しい人でした。

console.log(person1.name)//名前

console.log(person2.name)//名前

Q:エンドポイントでの関数プロトタイプのプロパティが何であるのか?この関数のプロトタイプは何ですか?

| |
| |

概要:プロトタイプprototypeプロパティポイント関数オブジェクトへのそれはコンストラクタを呼び出していることは、インスタンスを作成し、それがこの例のPERSON1とPERSON2でプロトタイプです。

Q:プロトタイプとは何ですか?それが作成されたときに(ヌルを除く)各JavaScriptオブジェクトが他のオブジェクトに関連付けされ、このオブジェクトは、我々はプロトタイプ呼んで、各オブジェクトは、プロトタイプからの属性を「継承」します。

-2-プロト。

プロトタイプおよび例は、人とPerson.prototypeそれとの関係である方法の例を表し、私たちは第二の特性について話しているこの時間:

プロト。(ヌルを除く)各JavaScriptオブジェクトは、プロトというプロパティがあり、このプロパティは、オブジェクトのプロトタイプを指します。

関数人(){

}

VaRの人=新しい人();

console.log(person.proto === Person.prototype)。//真

Q:インスタンスオブジェクトとコンストラクタは試作品を指すことができますのでので、もし、それのコンストラクタまたはインスタンスへのprototypeプロパティのポイントがありますか?

-3-コン​​ストラクタ

コンストラクタは複数のインスタンスを生成することができるので、それは、実施例を指していない、しかし、第3の特性の話であろういくつかのプロトタイプ点コンストラクタ:construcotrは、各プロトタイプは、constructorプロパティ関連点のコンストラクタを有します

これを検証するために、我々は試すことができます。

関数人(){

}

console.log(人=== Person.prototype.constructor)。//真

本質の包括的な概要---- :(大きな損を参照してください)

関数者(){//コンストラクタ

}

VaRの人=新しい人(); //オブジェクトのインスタンス

真はconsole.log(person.proto == Person.prototype)//

ES5を学ぶためにconsole.log(Person.prototype.constructor ==人)//真//方法、オブジェクトを取得することができるプロトタイプはconsole.log(Object.getPrototypeOf(人)=== Person.prototype)//真

プロトタイプの例

プロパティのインスタンスを読み込む場合、見つかった場合は、オブジェクトの属性に関連付けられたプロトタイプを探します、まだ見つける場合は、プロトタイプをプロトタイプに行ってきました、それは今のところ、トップレベルを発見されました。

======例えば:=========

関数人(){

}

Person.prototype.nameは= '名前';

VaRの人=新しい人();

person.name =「この人の名前」;

console.log(person.name)//この人の名前

person.nameを削除します。

console.log(person.name)//名前

私は人の名前のプロパティを設定するので、私は人の名前の属性を削除したとき、私は、「この人の名前」として読むことができ、person.nameを読んで、人から人からのプロトタイプを見つけることができませんつまりperson.proto == Person.prototype、幸い私たちは「名前」が見つかり見えるが、ケースがそれを見つけていませんか?それが何であるか、どのようなプロトタイプの試作品?

以前、私はプロトタイプが、それはオブジェクトであるため、私はそれを作成するための最も原始的な方法を使用することができ、オブジェクトであり、それがあることを言いました

VAR OBJ =新しいオブジェクト(); //文字通り新しいの2つのオブジェクトを作成します

obj.name = '名前';

console.log(obj.name)//名前

そうプロトタイプオブジェクトは、プロトインスタンスコンストラクタのプロトタイプ点を結合する前に話さオブジェクトコンストラクタによって生成され、

プロトタイプチェーン

Q:のObject.prototypeプロトタイプとは何ですか?

nullは、ああ、はい、それがnullであるので、あなたはのObject.prototypeを検索しまし停止することができます

緩い場所のいくつかこの記事の補足、そして最後に、補完するために、正しいです:

最初は、コンストラクタで、

関数人(){

}

VaRの人=新しい人();

console.log(person.constructor ===人)。//真

実際の人物でperson.constructorはなく、コンストラクタのプロパティを取得する場合、プロパティは、コンストラクタに読み取ることができないとき、人Person.prototypeプロトタイプから最初に読み込まれます、プロトタイプはそう、ちょうどこの性質を持っています

person.constructor === Person.prototype.constructor

おすすめ

転載: www.cnblogs.com/xiaoniaohhl/p/11105459.html