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让我加载模块.
你可以做任何一个a.test或a['test']- 两个都将访问test属性,a因此调用getter.
编辑:啊,我现在看到你想要的.你正在做的是聪明地使用getter,但不幸的是getter和setter不是当前JavaScript标准的一部分(它们在ECMAScript 5中尚未被广泛支持).Google Closure Tools似乎假设读取变量不会产生任何副作用,这在当前版本的JavaScript中都是如此,所以我认为没办法解决这个问题.你必须编辑输出以插回那些东西.
此外,这与您的问题无关,但我希望您在构造中进行额外hasOwnProperty检查for-in.
| 归档时间: |
|
| 查看次数: |
5142 次 |
| 最近记录: |