對於下面的代碼段什麼時候評估「this」?
a.b = function c(){
return function e(){
return this;
};
};
d = a.b();
什麼將d的值()是什麼?這可能不是一個很好的例子,但我只是對「this」會引用什麼感到困惑。
感謝,
對於下面的代碼段什麼時候評估「this」?
a.b = function c(){
return function e(){
return this;
};
};
d = a.b();
什麼將d的值()是什麼?這可能不是一個很好的例子,但我只是對「this」會引用什麼感到困惑。
感謝,
眼見爲d將現在等於一個功能「這」將被計算到任何函數調用它。它尚未實際評估過。
在執行結束時,d='function e() { return this; }'
,所以您執行d()
的那一刻是this
將被評估。
但是在這種情況下''this'將在'd()'被調用時被評估爲'window'。 – bfavaretto
確切地說,當'd()'最終被評估,但你是對的。之所以如此,是因爲不是對象的子對象的所有東西都是窗口的子對象,所以將'd()'想象爲'window.d()',因此它指向窗口。 – DanRedux
這通常是一個功能
$('.image').each(function(index){
alert($(this).attr('href'));
}
我的來電者認爲ab()將返回一個
請參閱http://remysharp.com/2007/04/12/jquerys-this-demystified/
假設d()
在您的代碼段d()
的最後一行將返回全局對象window
後立即被調用(如果您在瀏覽器中)。
但是兩者都是正確的:
d.call(a) === a;
d.call(a.b.prototype) === a.b.prototype;
這是說,this
是由什麼傳遞作爲第一個參數call
定義。
從你的代碼d不同於「this」。 d將是一個函數E,因爲你設置d是函數調用AB()返回一個函數的返回值,所以
d = function e(){
return this;
}
現在的this
值取決於你如何調用這個函數d 。當調用此函數時,將評估this
。如果你只是稱之爲d()
this
將是全球Window
對象。
,並讓說,如果我有
obj ={foo:1, bar:2};
和我這樣調用
d.call(obj)
this
將obj對象。 call()方法用於在任何對象上調用函數,傳遞的對象在該函數內的行爲如this
。
我知道Javascript這真的很讓人困惑,並且不容易讓你的頭在附近。 可能是這可以幫助http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx
this
是對調用方法的對象的引用。 (如果沒有with
指令)
您可以嘗試做console.log(this);函數內部 –
我的投票將是「執行時間」。 – aroth
這個問題幾乎被問及如何用正則表達式解析HTML(lol)。 http://stackoverflow.com/questions/3320677/this-operator-in-javascript – Marty