Javascript 在定义对象时从foo获取值到bar?

Javascript 在定义对象时从foo获取值到bar?,javascript,object,Javascript,Object,好的,我这里有一个简单的测试对象: var test = { foo: "dude", bar: "ok " + foo } 正如您所看到的,我想在这里使用foo-inside-bar,但它没有定义 我也试过了 bar: "ok " + test.foo 但测试也是未定义的,这有点道理,因为当我这么做的时候,我还没有定义它 我知道我能做到 var test = { foo: "dude" } test.bar = "ok " + test.foo 但

好的,我这里有一个简单的测试对象:

var test = {

    foo: "dude",
    bar: "ok " + foo

}
正如您所看到的,我想在这里使用foo-inside-bar,但它没有定义

我也试过了

   bar: "ok " + test.foo
但测试也是未定义的,这有点道理,因为当我这么做的时候,我还没有定义它

我知道我能做到

var test = {

    foo: "dude"

}

test.bar = "ok " + test.foo
但它并没有那么漂亮,我必须在测试对象的“外部”定义它

有可能做我想做的吗?或者最后一种方法是唯一的方法吗?

将其转化为方法:

bar: function() { return "ok " + this.foo ;}
小提琴:

将其转化为方法:

bar: function() { return "ok " + this.foo ;}

Fiddle:

假设我们无法更改代码的结构,那么您必须在
测试对象之外定义一些内容。但我认为这样做会更好:

var foo = "dude";

var test = {
    foo: foo,
    bar: "ok " + foo
};

假设我们不需要更改代码的结构,那么您必须在
test
对象之外定义一些内容。但我认为这样做会更好:

var foo = "dude";

var test = {
    foo: foo,
    bar: "ok " + foo
};
简短的回答是“不,没有其他方法可以做你想做的事”。但是,您可能需要考虑使用闭包。

var test = (function () {

    var foo, bar;

    foo = "dude";
    bar = "ok " + foo;

    return {
        foo: foo,
        bar: bar
    }

}());
简短的回答是“不,没有其他方法可以做你想做的事”。但是,您可能需要考虑使用闭包。

var test = (function () {

    var foo, bar;

    foo = "dude";
    bar = "ok " + foo;

    return {
        foo: foo,
        bar: bar
    }

}());

尽管从标量更改为函数,但这会导致与原始代码不同的行为:现在
bar
会随着
foo
中的更改进行实时更新。“这可能不可取。”乔恩说得没错,但我们可以肯定地认为这是可取的@Cherniv是什么让你如此确信它是你想要的?@JanDvorak提供给我们的原始数据OP@Cherniv当前位置我恭敬地表示不同意——假设没有知识被称为胡乱猜测,我反对。至少,在更改原始代码的语义时,差异应该非常明确,以避免意外。尽管从标量更改为函数,但这会导致与原始代码不同的行为:现在
bar
会实时更新
foo
中的更改。“这可能不可取。”乔恩说得没错,但我们可以肯定地认为这是可取的@Cherniv是什么让你如此确信它是你想要的?@JanDvorak提供给我们的原始数据OP@Cherniv当前位置我恭敬地表示不同意——假设没有知识被称为胡乱猜测,我反对。至少,在更改原始代码的语义时,差异应该非常明确,以避免意外。