var foo = {
x: 1,
y: (function() {
return ++this.x;
})()
};
console.log(foo.y); // undefined rather than 2
我們可以說我希望能夠在不使用foo.y()的情況下引用foo.y。那可能嗎?如何在同一個對象內的匿名函數中引用對象屬性?
以上顯然不起作用,我假設這是因爲封閉引用不同的這。
var foo = {
x: 1,
y: (function() {
return ++this.x;
})()
};
console.log(foo.y); // undefined rather than 2
我們可以說我希望能夠在不使用foo.y()的情況下引用foo.y。那可能嗎?如何在同一個對象內的匿名函數中引用對象屬性?
以上顯然不起作用,我假設這是因爲封閉引用不同的這。
如果您要訪問Ÿ作爲一個屬性,而不是一個功能,並使其返回foo.x的電流值,我能想到的是使用getter/setter方法的唯一途徑,這是一部分ES5規範,並在大多數現代瀏覽器中採用(但如果您支持舊版瀏覽器則不太適用)。
var foo = {
x: 1,
get y() {
return this.x;
}
};
您不聲明y作爲函數,而是作爲函數調用的結果。它應該是:
var foo = {
x: 1,
y: function() {
return this.x;
}
};
或者,如果你想只分配給X的Y值:
var foo = {
x: 1,
y: this.x
};
UPDATE:這是不可能使X Y的代名詞。當你聲明y時 - 它可以是一個值或一個函數。它不能是對另一個值的引用。
var foo = new Object();
foo.x = 1;
foo.y = function() { return this.x; };
console.log(foo.y());
,或者如果你想調用y
,而你foo定義:
var foo = new Object();
foo.x = 1;
foo.y = x;
console.log(foo.y);
爲什麼不直接返回X直接,如果你不希望使用Y()的功能?您返回函數的唯一原因是您實際上需要修改x的結果。
var foo = {
x: 1,
y: (function() {
return this.x;
})()};
console.log(foo.x); // 1
它不「變」'this'可言,這是一個IIFE(立即調用函數表達式),並沒有得到比全球'this',其他任何其他'this'背景下,其可能是'window',如果你在瀏覽器中工作,就像它是。 – 2012-04-02 02:28:41
你想foo.y總是返回任何x是因爲x的變化,或只是它被初始化爲? – 2012-04-02 02:29:36
@BradHarris是的,比方說,我希望foo.y在任何特定時刻總是包含++ this.x的值,但我不想使用parens(例如foo.y())。 – oevna 2012-04-02 02:33:06