有几种方法可以把JavaScript类般的行为,最常见的似乎是基于这样的原型:你用什么样式创建“班级”?
function Vector(x, y, x) {
this.x = x;
this.y = y;
this.z = z;
return this;
}
Vector.prototype.length = function() { return Math.sqrt(this.x * this.x ...); }
和基于封闭的方法类似
function Vector(x, y, z) {
this.length = function() { return Math.sqrt(x * x + ...); }
}
由于各种原因后者速度更快,但我见过(并经常写作)原型版本,并对其他人的做法感到好奇。
我的测试表明,基于闭包的方法比较慢。你必须为每个对象实例化一个单独的闭包。原型方法与所有实例共享方法。 – 2011-01-20 20:08:21