【发布时间】:2010-02-10 19:03:46
【问题描述】:
我正在编写一些代码,试图在闭包中隐藏一些私有变量。问题是环境在内存方面受到了相当大的限制,所以我还关心保持类的整体占用空间较低。
与仅将对象上的所有方法和变量公开相比,使用闭包隐藏私有实例变量和方法有什么影响?使用闭包的实例会比不使用闭包的实例占用更多内存吗?如果是这样,我希望使用多少内存?
我的代码看起来像这样
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;
}
....继续并定义所有其余的方法。
【问题讨论】:
-
为什么不写一些基准测试并自己找出答案?
-
我会的,只要我有更多的时间。该代码不是在传统的浏览器设置中运行,而是在设备上运行..所以很多标准工具不可用,或者需要一些调整/学习才能跟上速度。我们没有在代码中使用任何类型的框架……更多我关心的是堆栈帧分配。通过在同一个类中声明多个闭包,我会冒着环境信息冗余副本四处飘荡的风险,还是它们都使用相同的堆栈帧? (也许 js 的术语不合适,但你可能知道我的意思)
-
另外,我知道我可以在浏览器中使用一些虚拟类对其进行测试,我当然可以尝试在工作之外对其进行基准测试。我只是想知道一个标准的 js 引擎如何在一个类中处理多个相当大的闭包。
标签: javascript memory closures private-members