我是一位經驗豐富的編碼人員,首次使用Douglas Crockford的「Javascript:The Good Parts」一書學習JavaScript。在書中,他建議使用一個「純粹的原型」的方式來繼承,使用此功能:在JavaScript中使用純原型方法時如何處理對象屬性
我遇到的問題是,當一個對象具有的對象,而不是一個簡單的類型,創建一個屬性一個新對象繼承父對象的實例,而不是創建一個新對象。例如:
var aBody = {
arms : 2,
legs : 2
};
var person = {
name : 'Jeff',
body : Object.create(aBody)
};
document.writeln('Person '+person.name+' has '+person.body.arms+' arms and '+person.body.legs+' legs.');
var cat = Object.create(person);
cat.name = 'Bob';
cat.body.arms = 0;
cat.body.legs = 0;
document.writeln('Cat '+cat.name+' has '+cat.body.arms+' arms and '+cat.body.legs+' legs.');
document.writeln('Now person '+person.name+' has '+person.body.arms+' arms and '+person.body.legs+' legs.');
這有輸出:
Person Jeff has 2 arms and 2 legs.
Cat Bob has 0 arms and 0 legs.
Now person Jeff has 0 arms and 0 legs.
我得到了簡單的「名」屬性預期的行爲,而不是爲「體」。我想我明白了 - 因爲JavaScript是通過引用複製的,所以不會產生新的實例。我每次用person
創建一個對象時,都可以手動執行此操作。 cat.body = Object.create(aBody)
但我還沒有設法找到一個乾淨的方式滾動到原始對象定義(這裏,person
)。
我真的很感謝你可以提供的任何指導,因爲我正在學習編寫漂亮,清晰,可靠的JS代碼。有人使用'純原型'方法來解決這個問題有一個聰明的技巧嗎?