【发布时间】:2010-08-29 00:11:06
【问题描述】:
我刚刚完成了 Doug Crockford 的 The Good Parts,他提供了三种不同的继承方式:emulation 的经典模型、基于原型的继承和函数继承。
在后者中,他创建了一个函数,一个类似工厂的函数,它输出的对象增加了所需的方法,这些方法建立在其他对象的基础上;类似于:
var dog = function(params) {
// animal is the 'super class' created
// the same way as the dog, and defines some
// common methods
var that = animal(params);
that.sound = 'bark';
that.name = function () {};
return that;
}
由于以这种方式创建的所有对象都将引用相同的函数,因此内存占用量将比使用 new 运算符时低得多。问题是,原型方法在这种情况下会提供任何优势吗?换句话说,对象原型是否以某种方式“更接近金属”以提供性能优势,或者它们只是一种便利机制?
编辑:我会简化问题。原型与通过对象组合进行的模拟。只要您不要求所有对象实例都使用新方法进行更新,而这只是原型提供的便利,那么首先使用原型有什么好处吗?
我给 Doug Crockford 发了电子邮件,他是这样说的:
[使用上面的函数方法与原型] 并没有那么多内存。如果你有大量的对象乘以大量的方法,那么你可能想要原型化。但是现在记忆很丰富,只有极端的应用程序才会注意到它。
原型可以使用更少的内存,但检索速度可能会稍慢,尤其是在链很长的情况下。但一般来说,这并不明显。
【问题讨论】:
标签: javascript inheritance function prototype