首頁 > web前端 > js教程 > 如何在巢狀 JavaScript 函數中保留'this”指針

如何在巢狀 JavaScript 函數中保留'this”指針

DDD
發布: 2024-10-19 06:52:01
原創
370 人瀏覽過

How to Preserve the

巢狀函數中的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」物件) )被指派給「這個」。要解決此問題,可以使用三種方法:

  1. 使用call 方法呼叫函數:

    <code class="javascript">doSomeEffects.call(std_obj);</code>
    登入後複製
  2. 使用apply 方法應用函數:

    <code class="javascript">doSomeEffects.apply(std_obj, []);</code>
    登入後複製
  3. 建立綁定函數:

    <code class="javascript">var boundDoSomeEffects = doSomeEffects.bind(std_obj);
    boundDoSomeEffects();</code>
    登入後複製

以上是如何在巢狀 JavaScript 函數中保留'this”指針的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板