2012-12-11 68 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