繁体   English   中英

JS原型与封闭

[英]JS prototype vs closure

我有一个像这样的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()函数。

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

myCoolObject.prototype.protoProp = "pppp";
myCoolObject.prototype.getAtMeBro = function () { return "get at me bro"; };
var myInstance = new myCoolObject(5, 10);

但是当我检查它时, protoProp和'getAtMeBro()'都不是myInstance属性。

在此先感谢您的帮助 - 我很感激!

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

    例如,Facebook时间线源需要~4000(当我尝试时为3992)DOM元素; 每个这些比你所创建的对象的复杂得多 (当然,他们利用原型法,但他们持有大量的详细信息)。

  2. 在使用prototype时,您不能应用私有成员模式,因为您无法创建封装来封装它们。 这里的典型模式是表示一个带有前导_的私人成员, 暗示人们不要使用它(当然,没有什么能阻止他们这样做)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM