this指向問題(箭頭函數沒有this)


  1. 全局環境下,指向windows

    console.log(this.document === document); // true

  2. 函數上下文調用

    function f1(){
    return this;
    }
    f1() === window; // true

  3. 對象中的this

    對象內部方法的this指向調用這些方法的對
    象,函數的定義位置不影響其this指向,
    1. this指向只和調用函數的對象有關。
    2. 多層嵌套的對象,內部方法的this指向離被調用
    函數最近的對象(window也是對象,其內部對象調
    用方法的this指向內部對象, 而非window)。
  4. 構造函數中this
    構造函數中的this與被創建的新對象綁定。

  5. DOM事件處理函數

    (1)當函數被當做監聽事件處理函數時, 其 this 指向觸發該事件的元素 (針對於addEventListener事件)
    (2)代碼被內聯處理函數調用時,它的this指向監聽器所在的DOM元素,當代碼被包括在函數內部執行時,其this指向等同於 *函數直接調用*的情況

  6. setTimeout & setInterval

    對於延時函數內部的回調函數的this指向全局對象window

  7. 箭頭函數中的 this

    (1)由於箭頭函數不綁定this, 它會捕獲其所在(即定義的位置)上下文的this值, 作為自己的this值,
    function Person() {
    this.age = 0;
    setInterval(() => {
    this.age++;
    }, 3000);
    }
    Var p = new Person();

    (2)方法的箭頭函數this指向全局window對象,而普通函數則指向調用它的對象,箭頭函數沒有this

    var obj = {
      I: 10,
    b: () => console.log(this.i, this),
    c: function() {
    console.log( this.i, this)
    }
    }
    obj.b(); // undefined window{...}
    obj.c(); // 10 Object {...}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM