JS原型vs封闭
我有一个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时间轴Feed需要〜4000(当我尝试时为3992)DOM元素; 其中每一个都比你创建的对象复杂得多(授予他们使用原型方法,但他们拥有更多的信息)。
在使用prototype
时,你不能应用私有成员模式,因为你不能创建一个封闭来封装两者。 这里的典型模式是表示一个带有_
的私人成员,以暗示不使用它的人(但是当然,没有任何事情阻止他们这样做)。