2012-12-11 67 views
0
function Engineer (name, projs, mach) { 
    this.base = WorkerBee; 
    this.base(name, "engineering", projs); 
    this.machine = mach || ""; 
} 
Engineer.prototype = new WorkerBee; 

var jane = new Engineer("Doe, Jane", ["navigator", "javascript"], "belau"); 

這是來自Mozilla示例頁面。爲什麼新的WorkerBee沒有括號? 如果WorkerBee構造函數有參數,我們需要將它們傳遞給這個行嗎?OO Javascript。原型

Engineer.prototype = new WorkerBee(BaseClassConstructorArgument1,2...) 

我有這個問題: JS提示:缺少 '()' 調用構造函數。

所以我現在想知道乾淨的解決方案是怎麼樣的。

+0

new WorkerBee(); –

回答

3

使用new關鍵字調用構造函數時,括號是可選的,但有些linters會警告您。但是使用new WorkerBee而不是new WorkerBee()

如果你想傳遞參數,你自然需要括號。這就是爲什麼有些人認爲最好是總是使用paratheses的一致性(通常是寫皮棉規則的人)。

但是,選擇完全取決於你作爲程序員。

+0

我還不知道在哪種情況下我們需要擴展原型,而不是在哪個情況下。因爲Engineer構造函數總是會調用基類構造函數。 – Matthias

+0

@Matthias:我想你應該使用'call'來調用超類,並傳遞正確的'this'上下文,而不是僅僅執行該函數。您可能還需要修復構造函數'Engineer.prototype.constructor = WorkerBee;'以擁有正確的繼承鏈。 – elclanrs

+0

對此的回答很有用,也許另一個人也試圖理解相同的例子。它與我們應該如何以及何時應該使用「.prototype」有關。 – Matthias