this的指向不是在編寫時確定的,而是在執行時確定的,同時,this不同的指向在於遵循了一定的規則。
1.默認情況下,指向全局,瀏覽器的話就是指向window
2.如果函數被調用的位置存在上下文,那么函數被隱式綁定
function f() { console.log( this.name ); } var obj = { name: "Messi", f: f }; obj.f(); //被調用的位置恰好被對象obj擁有,因此結果是Messi
3.new 指向這個新對象。
function Person(name) { this.name = name; console.log(name); } var person1 = new Person('Messi'); //Messi
4.箭頭函數的this指向哪里?
箭頭函數的是沒有屬於自己的this的,它所謂的this是捕獲其上下文的this,作為自己的this,所以箭頭函數不會被new調用,所謂的this也不會被改變
我們可以用Babel理解一下箭頭函數:
// ES6 const obj = { getArrow() { return () => { console.log(this === obj); }; } } // ES5,由 Babel 轉譯 var obj = { getArrow: function getArrow() { var _this = this; return function () { console.log(_this === obj); }; } };
