我正在研究一些代码,我试图在闭包中隐藏一些私有变量。问题是环境在内存方面受到了相当大的限制,所以我也关注保持类的总体足迹低。
与仅公开对象上的所有方法和变量相比,使用闭包隐藏私有实例变量和方法有什么影响?使用闭包的实例是否比不使用闭包的实例占用更多内存?如果是这样,我期望使用多少内存?
我的代码看起来像这样
function Foo() {
// private variables
var status = 3;
var id = 4;
...
...
// private methods
var privateMethod = function () {
// do something awesome
}
...
// a whole bunch of these
// public methods
this.publicDriver = function () {
privateMethod();
}
.. a few more of these
};
对战
function Bar() {
// only define public variables
this.x = 1;
this.y = 3;
}
Bar.prototype.method1 = function () {
// blah;
}
....继续并定义所有其他方法。
答案 0 :(得分:1)
好的,从我所看到的,使用闭包构造类为构造函数中定义的每个方法构造新的函数对象,而原型赋值方式创建一个由对象的所有实例共享的中心函数。然后根据对象解释中心实例以获取正确的实例变量引用。
我猜测闭包示例中定义的每个函数都会引用相同的堆栈帧。
尽管如此,在我的情况下,还有更多的物品漂浮着。
答案 1 :(得分:0)
以下链接显示了有关分析javascript函数的一些提示的信息,以查看有关其性能的信息:
答案 2 :(得分:0)
查看these基准。虽然它们是继承基准,但它应该让你了解内存影响,因为它们中的一些使用闭包,而有些则没有。
答案 3 :(得分:0)
封闭在闭包中的变量可以在JavaScript中从闭包外部更新,这表明只存在一个变量副本。这意味着没有理由在JavaScript中使用闭包会产生任何重大的内存影响。
如果在创建闭包后冻结变量的值,那将是一个不同的故事,因为这意味着每个闭包必须有一个包含变量的私有副本。
即便如此,您仍应执行实际的基准检查: - )