Javascript defineGetter

Dr *_*ter 5 javascript getter

var a = {}; 

a.__defineGetter__('test',function() {return 5;}); 

var i ="test";  
Run Code Online (Sandbox Code Playgroud)

除此之外还有其他方法可以执行getter a[i](同时使用var i它)

编辑:

我在问var i这个问题.我会更好地解释真正的问题.

我在命名空间对象上使用getter仅在需要时加载模块.

MyNameSpace.__defineGetter__('db',function(){MyNameSpace.loadModule('db');});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我试图加载所有模块:

for (var i in MyNameSpace){
    MyNameSpace[i];
}
Run Code Online (Sandbox Code Playgroud)

我在我的代码上使用了Google闭包编译器,它将上面的循环减少到:

for(var i in MyNameSpace);
Run Code Online (Sandbox Code Playgroud)

没有模块加载.我试图"欺骗"gcc让我加载模块.

cas*_*nca 7

你可以做任何一个a.testa['test']- 两个都将访问test属性,a因此调用getter.

编辑:啊,我现在看到你想要的.你正在做的是聪明地使用getter,但不幸的是getter和setter不是当前JavaScript标准的一部分(它们在ECMAScript 5中尚未被广泛支持).Google Closure Tools似乎假设读取变量不会产生任何副作用,这在当前版本的JavaScript中都是如此,所以我认为没办法解决这个问题.你必须编辑输出以插回那些东西.

此外,这与您的问题无关,但我希望您在构造中进行额外hasOwnProperty检查for-in.