巢狀函數中的JavaScript「this」指標
在JavaScript 中,使用巢狀函數時「this」指標的值可能會令人困惑功能。與預期相反,呼叫巢狀函數可以將「this」指標指派給全域「視窗」對象,而不是封閉的函數。
考慮以下程式碼:
<code class="javascript">var std_obj = { options: { rows: 0, cols: 0 }, activeEffect: "none", displayMe: function() { // this refers to std_obj if (this.activeEffect == "fade") { } var doSomeEffects = function() { // this unexpectedly refers to the window object if (this.activeEffect == "fade") { } }; doSomeEffects(); } }; std_obj.displayMe();</code>
在此場景中,當呼叫巢狀函數doSomeEffects 時,「this」指標指向「window」對象,即使它是在std_obj 範圍內聲明的。這是因為 JavaScript 根據函數的呼叫方式來決定「this」指標。
在這種情況下,在沒有前導父物件的情況下呼叫 doSomeEffects,這會產生全域物件(通常是「window」物件) )被指派給「這個」。要解決此問題,可以使用三種方法:
使用call 方法呼叫函數:
<code class="javascript">doSomeEffects.call(std_obj);</code>
使用apply 方法應用函數:
<code class="javascript">doSomeEffects.apply(std_obj, []);</code>
建立綁定函數:
<code class="javascript">var boundDoSomeEffects = doSomeEffects.bind(std_obj); boundDoSomeEffects();</code>
以上是如何在巢狀 JavaScript 函數中保留'this”指針的詳細內容。更多資訊請關注PHP中文網其他相關文章!