看起來好像我終於理解了JavaScript繼承以及它應該如何正確完成。這裏是我的代碼:JavaScript和原型繼承
function Human(eyes) {
this.eyes = eyes ? "Not blind" : "Blind";
}
Human.prototype.canSee = function() {
return this.eyes;
};
function Male(name, eyes) {
Human.call(this, eyes);
this.name = name;
}
Male.prototype = Object.create(Human.prototype);
var Sethen = new Male("Sethen", true);
console.log(Sethen.canSee()); //logs "Not blind"
據我瞭解,使用Object.create
創建繼承原型對象比使用new
關鍵字好得多。這在我的腦海裏提出了一些問題。
- 在
Male.prototype = Object.create(Human.prototype)
原型鏈是Male.prototype --> Human.prototype --> Object.prototype --> null
? - 在
Male
構造函數中,我使用Human.call(this, eyes);
來調用一個超類,我不得不在Male
構造函數中再次傳遞給Human
構造函數。這看起來很痛苦,有沒有更簡單的方法來做到這一點? - 爲什麼我有時會看到像
Male.prototype = new Human();
這樣的代碼......這似乎是不正確的。當我們這樣做時究竟發生了什麼?
你見過這個http://stackoverflow.com/questions/13040684/javascript-inheritance-object-create-vs-new和這個http://stackoverflow.com/問題/ 4166616 /諒解 - 差異 - 對象 - 創建和新 - somefunction-in-j ??? – rafaelcastrocouto
不,我沒有。我會看看。 – Sethen