我與面向對象的JavaScript,以處理有不同的屬性,但相同的方法多個對象的常用方法有限的經驗將被使用構造如下:複製構造函數和新用的Object.create()
function Animal (type) {
this.type = type
};
Animal.prototype.sayHello = function() {
return 'Hi, I am a ' + this.type
};
var goat = new Animal('Goat');
我的理解是goat
會繼承/參考Animal
的功能。
我推測我可以複製上述與下列對象字面概念:
var Animal = {
type : '',
sayHello : function() {
return 'Hi, I am a ' + this.type
}
}
var goat = Object.create(Animal);
goat.type = 'Goat';
是繼承來Animal
丟在這裏,或Goat
仍引用Animal
的方法呢?
我想知道是否有任何問題使用Object.create()
而不是new
複製構造函數/類。是否有一個性能偏移或任何理由繼續使用new
?
任何意見,將不勝感激,我很高興地補充說,如果需要澄清的問題。
更新的對象創建
var Animal = {
sayHello : function() {
return 'Hi, I am a ' + this.type
}
}
var goat = Object.create(Animal, { 'type' : { value: 'goat' } });
你真的想在所有的呼叫站點輸入'goat.type'(以及更多)嗎?另外如果你想改變它,重構將會更加困難。這只是可怕的。在之前有人說「創建一個工廠」,在這種情況下,你只是做了美化的構造函數+原型。 – Esailija
@Esailija我添加了關於如何填充'type'的更新。我很想看看你會如何處理這個問題。 – mikedidthis
這比我剛纔批評的更糟糕:D它仍然處於呼叫站點,對象外部,甚至更詳細 – Esailija