JavaScriptでオブジェクトや関数のサブタイプを作成するためにextendメソッドを使っています。私はこれら2つの線がどのように異なっているかをちょっと理解するのに苦労しています:JavaScriptの継承拡張メソッドのヒント
- f.prototype = p;
- f.prototype = new p();
舞台裏で実際に何が起こっているのか説明できますか?
「new p();」を使用すると、オブジェクトを渡すときの理解となります。存在しないコンストラクタが呼び出されます。これは正しいです?このコードを統合する方法はありますか?
function extend(p) {
if (p == null) throw TypeError();
var f = function() {},
t = typeof p;
if(t === 'object') {
f.prototype = p;
f.prototype.constructor = f;
return new f();
} else if(t === 'function') {
f.prototype = new p();
f.prototype.constructor = f;
return f;
} else {
throw TypeError();
}
}
// ==========================
var Person = {
firstName: 'John',
lastName: 'Doe'
};
console.log('Person: ', Person);
var Employee = extend(Person);
Employee.prototype = {
employeeID: 0
}
console.log('Employee: ', Employee);
var Manager = extend(Employee);
Manager.prototype.fireEveryone = function() {
alert('Everyone is fired!!!!');
}
console.log('Manager: ', Manager);
おかげ
[このかもしれませんヘルプ。](http://stackoverflow.com/a/13072338/1257652) –