this指向 一般函數與箭頭函數


es6對象內函數一般有兩種寫法:

var person1 = {
    name: "p1",
    sayThis() {
        console.log(this);
    }
};

var person2 = {
    name: "p2",
    sayThis:()=> {
        console.log(this);
    }
};

person1.sayThis()
person2.sayThis()

輸出:

person1的寫法,類似於:

var person1 = {
    name: "p1",
    sayThis: function() {
        console.log(this);
    }
};

this指向當前調用此方法的對象

 

person2的寫法,使用了箭頭函數,箭頭函數的this指向當前的執行環境(創建它時所處的上下文)(箭頭函數可以捕獲其所在上下文的this值),這里當然是window對象,箭頭函數並沒有自己的this值,它的this繼承自外圍作用域

 

function Person() {  
    this.age = 0;  
    setInterval(() => {
        // 回調里面的 `this` 變量就指向了期望的那個對象了
        this.age++;
    }, 3000);
}

var p = new Person();

 

備注:call,apply,bind對es6中的this,無效

 

var objProject = this;
var foo = (() => this);
console.log(foo());  // window
console.log(objProject);  // window
console.log(foo() === objProject ); // true
// 作為對象的一個方法調用
var obj = {foo: foo};
console.log(obj.foo() === objProject ); // true
// 嘗試使用call來設定this
console.log(foo.call(obj) === objProject ); // true
// 嘗試使用bind來設定this
foo = foo.bind(obj);
console.log(foo() === objProject ); // true

 


免責聲明!

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



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