Javascript 立即调用的属性能否引用它被分配到的对象?

Javascript 立即调用的属性能否引用它被分配到的对象?,javascript,Javascript,我有一些代码: var obj = { foo : true, bar : (function() { if (obj.foo) { return qux; } })() }; 我的问题是,qux永远不会返回,因为执行bar时,obj不存在,因为bar是一个立即调用的函数 有一个解决方案: var obj = { foo : true }; obj.bar = (function() { if (

我有一些代码:

var obj = {
    foo : true,
    bar : (function() {
        if (obj.foo) {
            return qux;
        }
    })()
};
我的问题是,
qux
永远不会返回,因为执行
bar
时,
obj
不存在,因为
bar
是一个立即调用的函数

有一个解决方案:

var obj = {
    foo : true
};

obj.bar = (function() {
    if (obj.foo) {
        return qux;
    }
})();
但是我发现前面的代码更简单。有没有办法做到这一点,还是我只能坚持后者

提前谢谢

有没有办法做到这一点,还是我只能坚持后者

假设
qux
不是IIFE的局部变量,您可以使用它(不过仍然需要拆分对象声明):

有没有办法做到这一点,还是我只能坚持后者

假设
qux
不是IIFE的局部变量,您可以使用它(不过仍然需要拆分对象声明):

实际上有一种方法,或者至少有一个想法,但这有点荒谬

注意:我没有实现依赖于其他delayedMembers的delayedMembers

然后可以定义对象,如:

var obj = delayedObj({
    foo : true,
    bar : delayedMember(function () {
        return this.foo;
    })
});

console.log(obj.bar); //true
实际上有一种方法,或者至少有一个想法,但这有点荒谬

注意:我没有实现依赖于其他delayedMembers的delayedMembers

然后可以定义对象,如:

var obj = delayedObj({
    foo : true,
    bar : delayedMember(function () {
        return this.foo;
    })
});

console.log(obj.bar); //true

不,那是办不到的。编辑等待我会发布一个可能性。再编辑一次不,那是个愚蠢的主意。我坚持我原来的观点:)你为什么认为你需要在那里生活?我不认为立即设置bar属性有什么意义,特别是当它取决于foo时,这总是正确的…@Samy这就是为什么我问你需要生活的原因;这个例子显然过于简化,以至于很难说出真正的需求是什么。请看一下我的答案。我认为它比你选择的答案更接近你想要的答案。不,那是不可能的。编辑等待我会发布一个可能性。再编辑一次不,那是个愚蠢的主意。我坚持我原来的观点:)你为什么认为你需要在那里生活?我不认为立即设置bar属性有什么意义,特别是当它取决于foo时,这总是正确的…@Samy这就是为什么我问你需要生活的原因;这个例子显然过于简化,以至于很难说出真正的需求是什么。请看一下我的答案。我认为这比你选择的答案更接近你想要的。这似乎是共识。谢谢。是的,您必须拆分文字声明。或者使用构造函数。@bfavaretto您可以使用一些辅助函数来获得某种语法糖,就像我的回答中所说的。这似乎是共识。谢谢。是的,您必须拆分文字声明。或者使用构造函数。@bfavaretto您可以始终使用一些帮助函数来获得某种语法糖,如我的回答中所述。很有趣,但我同意“有点可笑”的部分:)有意思,但我同意“有点可笑”的说法!:)
var obj = delayedObj({
    foo : true,
    bar : delayedMember(function () {
        return this.foo;
    })
});

console.log(obj.bar); //true