我认为这取决于是否在内存中为对象的每个实例创建了方法的副本。例如:
var MyObj = function(x) {
this.doStuff = function() {
//Do some stuff
};
this.someProperty = x;
};
//myInstance will have its own copy of the doStuff method
var myInstance = new MyObj(10);
在上面的代码中,MyObj
每个实例将需要doStuff
在存储器中的副本。然而,如果在prototype
声明的方法,这是一个不同的故事:
var MyObj = function(x) {
this.someProperty = x;
};
MyObj.prototype.doStuff = function() {
//Do some stuff
};
//myInstance can still access doStuff, but all instances share one copy
var myInstance = new MyObj(10);
这一次,MyObj
每个实例都有自己的属性someProperty
,但是当你调用doStuff
方法,它不是在实例中发现本身,所以prototype
被看作是在它被发现和执行的地方。
但是,如果像您所说的那样,有些方法根本没有被调用,我不认为有任何理由让它们在任何地方被声明。就我个人而言,我会摆脱它们(除非它们有可能在未来提供价值)。但是我不知道你的代码,所以这是你必须做出的决定。
方法是在每个实例上还是在'prototype'上声明的?如果他们在“原型”上,则不太可能产生很大的差异,因为所有实例都有效地共享该方法的一个副本。 – 2012-02-23 21:22:04
它们在构造函数中定义在对象上,还是通过'prototype'在实例之间共享?您必须展示一些代码,并理想地通过性能分析器运行您的代码以准确查看内存瓶颈的创建位置。 – zzzzBov 2012-02-23 21:23:15
@James和zzzzBov - 我已根据您的意见更新了OP(感谢您的评论)。 – TheOx 2012-02-23 21:38:23