为什么将方法放在类的原型上而不是在构造函数中声明它们?

时间:2015-06-07 00:36:31

标签: javascript node.js inheritance prototype

我正在尝试更多地了解原型继承,我对将原型添加到实例并将它们添加到实例之间的区别感到困惑。为什么我要做另一个呢?

原型方法:

function Foo() {}
Foo.prototype.doBar = console.log.bind(console, 'Did bar!');
var foo = new Foo();
foo.doBar(); // prints "Did bar!"

实例方法:

function Foo() {
  this.doBar = console.log.bind(console, 'Did bar!');
}
var foo = new Foo();
foo.doBar(); // prints "Did bar!"

将我的方法放在原型上有什么好处?有没有时候通过构造函数在实例上声明方法更有意义?

2 个答案:

答案 0 :(得分:1)

内部是相同的。

在编辑先前声明的对象时,可以使用原型,可以在外部库或类似的对象中。

编辑原型比查找原始构造函数声明更容易,并修改那里的代码。

此外,如果你想使用原始声明,然后更改它,你可以使用原型,但不推荐,最好创建一个不同的"类"避免混淆。

答案 1 :(得分:1)

通过构造函数声明方法具有性能影响。对于每个新创建的实例,JS解释器必须重新读取函数代码。

通常你希望你的构造函数尽可能轻,所以总是声明原型方法而不是通过构造函数是一个很好的拇指规则。