[英]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()
函数。
我的问题是双重的 - 我上面的方法真的“低效”吗? 我意识到低效率是一个相对的术语 - 但这是我可能会注意到的。 如果它效率低下,我该如何将这些函数添加到myCoolObject
的prototype
中? 我尝试了以下方法:
myCoolObject.prototype.protoProp = "pppp";
myCoolObject.prototype.getAtMeBro = function () { return "get at me bro"; };
var myInstance = new myCoolObject(5, 10);
但是当我检查它时, protoProp
和'getAtMeBro()'都不是myInstance
属性。
在此先感谢您的帮助 - 我很感激!
最好的建议是试试看 。 在现代的JS引擎中,你会发现4,000个对象是小孩玩的,不应该是一个问题(前提是每个对象都不会太大 )。 如果你有IE6和旧引擎的用户,请为他们做好准备,以便能够应对更少。
例如,Facebook时间线源需要~4000(当我尝试时为3992)DOM元素; 每个这些比你所创建的对象的复杂得多 (当然,他们利用原型法,但他们持有大量的详细信息)。
在使用prototype
时,您不能应用私有成员模式,因为您无法创建封装来封装它们。 这里的典型模式是表示一个带有前导_
的私人成员, 暗示人们不要使用它(当然,没有什么能阻止他们这样做)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.