有幾種方法可以把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