2011-05-04 29 views
5

JavaScript的新手入門。JavaScript範圍:從子成員的封閉中引用父對象成員

如何在成員foobar中引用成員foo,因爲foobar已關閉?

var priv = { 

    foo: "bar", 

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

}; 

上面的代碼失敗。其中,this.fooundefined。如果我將this.foo更改爲priv.foo,它仍然是undefined。我如何從foobar關閉中參考priv.foo

+2

你真的想打電話給你封?我會嘗試在'})'' – meze 2011-05-04 00:21:40

+0

之後移除'()'。不幸的是,我這樣做。 「foobar」實際上是幾十行。 :/ – DotNetQuestionDate 2011-05-04 00:28:42

+0

我在下面的回答中解釋了 – meze 2011-05-04 00:30:03

回答

2

這是不可能的初始化期間在其認定中讀取對象的任何屬性因爲當時prev將不確定。 當你試圖在它內部調用clojure時,它指的是未定義的thispriv

也許你想寫:到底

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

沒有()。然後你可以把它作爲priv.foobar();

如果您仍然需要調用它,你可以定義foobarfoo

var priv = { 
    foo: "bar" 
}; 

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

問題是你沒有定義閉包 - 我不認爲有任何方法可以從你的函數訪問foo,因爲priv尚未初始化。

你究竟想要做什麼?下面相當於我明白你的樣品正在試圖做的,但我的猜測是,我不理解的問題:

// Set elsewhere 
var foo = "bar"; 

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

總之,我有一個巨大的JS文件。它定義了一些私有變量和一個公共對象。我試圖將這些私有變量封裝到一個對象中,但除了一個私有變量以外,每個私有變量都依賴於另一個私有變量的值。相反,假設'foobar'是一個基於'foo'值的運行時動態計算。合理? – DotNetQuestionDate 2011-05-04 00:41:59

相關問題