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
