JavaScriptのプロトタイプチェーン継承メカニズム
2785 ワード
prototype継承を実現するソース JavaScriptがnewコマンドにより構成関数にインスタンスオブジェクトを作成した後、インスタンスオブジェクトは属性と方法を共有できませんでした.例えば 以上のように、各インスタンスオブジェクトには、自分の属性と方法のコピーがあります.これはデータ共有ができないだけでなく、大きな資源の浪費でもあります.
プロトタイプが現れます newコマンド作成のインスタンスオブジェクトに欠点があるので、この属性はオブジェクト(以下「prototypeオブジェクト」という)を含み、すべてのインスタンスオブジェクトが共有する属性と方法をこのオブジェクトの中に置く.それらは共有する必要がない属性と方法を、コンストラクタに入れます. 例のオブジェクトが作成されると、プロトタイプオブジェクトの属性および方法が自動的に参照されます.つまり、インスタンスオブジェクトの属性と方法は、2つに分かれています.1つはローカルで、もう1つは参照です.以下のとおりです
function Person (name) {
this.name = name
this.work = 'write code'
}
// , :
var p1 = new Person('suoling')
var p2 = new Person('yaoyuan')
// work , , 。
p1.work = 'sleep'
console.log(p2.work) // 'write code'
プロトタイプが現れます
function Person (name) {
this.name = name
}
Person.prototype = { work: 'write code' }
// , :
var p1 = new Person('suoling')
var p2 = new Person('yaoyuan')
console.log(p1.work) // 'write code'
console.log(p2.work) // 'write code'
// ,work prototype , 。 prototype , 。
Person.prototype.work = 'sleep'
console.log(p1.work) // 'sleep'
console.log(p2.work) // 'sleep'
次号に続く