JS原型与封闭

时间:2012-02-15 16:26:24

标签: javascript

我有一个像这样的JavaScript对象 - 使用闭包模拟私有与公共函数/变量:

var myCoolObject = function(x, y) {

    var prop1 = "a cool prop1 value";
    var negX = x * -1;
    var negY = y * -1;
    var xyProduct = x * y;

    return {
      PublicProp1: prop1,
      getXYProduct: function() { return xyProduct; },
      getNegX: function() { return negX; },
      getNegY: function() { return negY; }
    }
}

我将创建此对象的大约4000个实例,从我正在阅读的内容中添加prototype的函数将比添加它们更有效(因为在我的示例中,每个实例都有它是自己的getXYProcust()getNegX()getNegY()函数。

我的问题是双重的 - 我上面的方法真的“低效”吗?我意识到低效率是一个相对的术语 - 但这是我可能会注意到的。如果效率低下,我该如何将这些功能添加到prototype的{​​{1}}?我尝试了以下方法:

myCoolObject

但是当我检查它时,myCoolObject.prototype.protoProp = "pppp"; myCoolObject.prototype.getAtMeBro = function () { return "get at me bro"; }; var myInstance = new myCoolObject(5, 10); 和'getAtMeBro()'都不是protoProp的属性。

提前感谢您的帮助 - 我很感激!

1 个答案:

答案 0 :(得分:3)

  1. 最好的建议是试试看。在现代的JS引擎中,你会发现4,000个对象是小孩玩的,不应该是一个问题(前提是每个对象都不会大)。如果你有IE6和旧引擎的用户,请为他们做好准备,以便能够应对更少。

    作为一个例子,Facebook时间线源需要~4000(当我尝试时为3992)DOM元素;每个比你正在创建的对象更复杂(被授予,他们使用原型方法,但他们持有 lot 更多信息)。

  2. 使用prototype时无法应用私有成员模式,因为无法创建封闭来封装两者。这里的典型模式是表示一个私人成员,其前导_提示给不使用它的人(但当然,没有什么能阻止他们这样做)。< / p>