JavaScriptのプロトタイプのプロトタイプとプロトタイプチェーンの深い理解

プロトタイプとは何ですか?

プロトタイププロパティを作成する機能があるいったんそのプロトタイプオブジェクト、プロトタイプオブジェクトであるオブジェクトを指します。
概要:プロトタイプはそのプロトタイプオブジェクトオブジェクトです。
ここに画像を挿入説明
プロトタイプの役割は次のとおり共有方法の
コンストラクタオブジェクトがインスタンス化されるとき、オブジェクトの各インスタンスは、プロパティおよびメソッドコンストラクタのためのオープンスペースが作成され、次のように

var Person = function(name,age){
	this.name = name;
	this.age = age;
	this.eat = function(){
		console.log("吃饭")
	}
}
var p1 = new Person()
var p2 = new Person()

P1、P2は、このように、コードの冗長性を引き起こして二回作成されます食べて()メソッド、および同じ論理機能を、唯一異なるアドレスを持つメモリを占有し、パフォーマンスに影響を与える
ような問題を解決するために、公共の場で書き込む方法プロトタイプオブジェクト、すべてのオブジェクトインスタンス化機能が直接アクセスできるメソッドのプロトタイプオブジェクト

var Person = function(name,age){
	this.name = name;
	this.age = age;
}
Person.prototype.eat = function(){
	console.log("吃饭")
}
console.log(Person)

ここに画像を挿入説明

構造と機能の関係、プロトタイプオブジェクト三のオブジェクトインスタンス

var Person = function(name,age){
	this.name = name;
	this.age = age;
}
Person.prototype.eat = function(){
	console.log("吃饭")
}
var ws = new Person("小花",5)

上記の例のPersonコンストラクタ:
ここに画像を挿入説明__proto__何をここで説明し、コンストラクタ関数:
すべての関数がプロトタイププロトタイプオブジェクトを持っているように、各オブジェクトは、オブジェクトのプロトタイプと呼ばれる__proto__を、持っています。これは、プロトタイプオブジェクトのコンストラクタを指します。
プロトタイプかをコンストラクタ関数を有する__proto__は、コンストラクタに戻る意味
グラフから分かります。

console.log(Person.prototype.constructor === Person)    //true
console.log(ws.__proto__ === Person.prototype)          //true
console.log(ws.__proto__.constructor === Person)        //true

プロトタイプチェーン

ここに画像を挿入説明これは、図から見られています:

console.log(Person.prototype.__proto__ === Object.prototype)    //true
console.log(Object.prototype.constructor === Object)            //true
console.log(Object.prototype.__proto__)                         //null

ルールオブジェクトはプロトタイプチェーンに沿ってメンバーを見つけることです検索

オブジェクトのプロパティまたはメソッドにアクセスする場合:

  1. まず、オブジェクト自体を見つける見つけるための出口がある、またはプロトタイプチェーン・ルックアップ(__proto__プロトタイププロトタイプオブジェクトポイント)に沿って何もありません
  2. そして、そこに見つける撤退、またはプロトタイプチェーンに沿って見つけるだろう、プロトタイプオブジェクトのコンストラクターがありませんでした見つけます
  3. ルックObjectコンストラクタのプロトタイプは、そうでない場合は検索NULLの終わりまで、プロトタイプチェーンに沿って見つけることが出て、そこではありません
リリース5元の記事 ウォンの賞賛6 ビュー69

おすすめ

転載: blog.csdn.net/qq_22841567/article/details/104611122