我有一些代码:
var obj = {
foo : true,
bar : (function() {
if (obj.foo) {
return qux;
}
})()
};
我的问题是永远不会返回qux
,因为obj
执行时bar
不存在,因为bar
是一个立即调用的函数。
有一个解决方案:
var obj = {
foo : true
};
obj.bar = (function() {
if (obj.foo) {
return qux;
}
})();
但我发现以前的代码更简单。有没有办法实现这个目标,还是我坚持使用后者?
提前致谢。
答案 0 :(得分:2)
有没有办法实现这个目标,还是我坚持使用后者?
假设qux
不是IIFE的局部变量,你可以使用它(你仍然需要拆分对象声明):
var obj = {
foo : true
};
obj.bar = obj.foo ? qux : undefined;
答案 1 :(得分:2)
实际上有一种方式或者至少是关于如何做到这一点的想法,但这有点荒谬。
注意:我没有实现依赖于其他delayedMembers的delayedMembers。
function delayedObj(o) {
var k, v;
for (k in o) {
if (o.hasOwnProperty(k) && (v = o[k]).__delayedMember__) {
o[k] = v.fn.call(o);
}
}
return o;
}
function delayedMember(fn) {
return {
__delayedMember__: true,
fn: fn
};
}
然后你可以定义你的对象:
var obj = delayedObj({
foo : true,
bar : delayedMember(function () {
return this.foo;
})
});
console.log(obj.bar); //true