JavaScript范围:从子成员的闭包引用父对象成员

时间:2011-05-04 00:17:46

标签: javascript scope

这里有新手JavaScript。

如果foo在关闭中,我如何从成员foobar中引用成员foobar

var priv = {

    foo: "bar",

    foobar: (function() {
        return this.foo === "bar";
    })()

};

上面的代码失败了。其中,this.fooundefined。如果我将this.foo更改为priv.foo,它仍然是undefined。如何在priv.foo封闭内引用foobar

2 个答案:

答案 0 :(得分:2)

在初始化期间无法读取对象的任何属性,因为此时prev将不确定。 当您尝试在其中调用clojure时,它会引用未定义的thispriv

可能你想写:

foobar: (function() {
    return this.foo === "bar";
})

最后没有()。然后你可以将其称为priv.foobar();

如果您仍然需要拨打电话,可以在foobar之后定义foo

var priv = {
    foo: "bar"
};

priv.foobar = (function() {
    return priv.foo === "bar";
})()

答案 1 :(得分:0)

问题是你没有定义一个闭包 - 我认为没有任何方法可以从你的函数中访问foo,因为priv尚未初始化。

你到底想要做什么?以下内容相当于我理解你的样本试图做的事情,但我的猜测是我不理解这个问题:

// Set elsewhere
var foo = "bar";

var priv = {
    foo: foo ,
    foobar: foo == "bar"
};