我有一个像这样的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
的属性。
提前感谢您的帮助 - 我很感激!
答案 0 :(得分:3)
最好的建议是试试看。在现代的JS引擎中,你会发现4,000个对象是小孩玩的,不应该是一个问题(前提是每个对象都不会太大)。如果你有IE6和旧引擎的用户,请为他们做好准备,以便能够应对更少。
作为一个例子,Facebook时间线源需要~4000(当我尝试时为3992)DOM元素;每个远比你正在创建的对象更复杂(被授予,他们使用原型方法,但他们持有 lot 更多信息)。
使用prototype
时无法应用私有成员模式,因为无法创建封闭来封装两者。这里的典型模式是表示一个私人成员,其前导_
,提示给不使用它的人(但当然,没有什么能阻止他们这样做)。< / p>