JS newb在这里,所以希望这不是一个愚蠢的问题。
使用方法定义自定义对象时,以下两种方法之间的区别和优缺点是什么?
1:使用this
定义类定义中的方法。
function MyObj(){
this.doStuff = function(){
//method body
}
}
2:使用prototype
单独定义方法。
function MyObj(){
}
MyObj.prototype.doStuff = function()
{
//method body
}
我现在正在搞乱这两件事,两者似乎都是一样的,所以我想我会找到差异,然后我会走上一条赛道,然后再回来咬我的屁股:)
干杯全部
答案 0 :(得分:3)
使用this
时,“class”的每个实例都有自己的方法副本。
当您使用prototype
时,所有实例将共享该方法的一个副本。因此,在prototype
上声明方法更有效,因为每个实例都需要更少的内存。
例如,创建两个MyObj
实例:
var o1 = new MyObj(),
o2 = new MyObj();
如果在构造函数中声明了doStuff
方法,那么每个实例现在都在内存中有该方法的副本。如果它在prototype
上声明,则他们共享该副本。当你试着打电话时:
o1.doStuff();
实例本身没有doStuff
属性,因此我们将原型链向上移动到MyObj.prototype
,其中有doStuff
方法。
答案 1 :(得分:1)
除了内存考虑因素外,还有性能方面的考虑因素。
在构造函数中this
上定义属性是much slower,但是在以后实际访问这些属性方面locally defined properties have a slight performance advantage,因为JS引擎不必走原型链
换句话说,如果您不经常创建少量对象,最好在构造函数中本地定义属性(#1),但如果要创建许多对象,请使用prototype
( #2)。