在JavaScript中this的指向一直是一個困擾我們的問題,在JavaScript中this的指向是不固定的,但是我們可以通過使用bind()、call()、apply()來改變this的指向,但是在ES6中this的指向與之前的有所不同。
箭頭函數的this始終指向函數定義時的this而不是執行時,也就是始終指向箭頭函數的外層,ES5中this的指向始終指向最后調用他的那個對象。
- call() 方法使用一個指定的 this 值和單獨給出的一個或多個參數來調用一個函數
語法:fun.call(thisArg, arg1, arg2, ...)
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
}
var b = a.fn;
b.call(a,1,2) // 3
- apply() 方法調用一個具有給定this值的函數,以及作為一個數組(或類似數組對象)提供的參數.
語法:
func.apply(thisArg, [argsArray])
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
}
var b = a.fn;
b.apply(a,[1,2]) // 3
- bind()方法創建一個新的函數,在bind()被調用時,這個新函數的this被bind的第一個參數指定,其余的參數將作為新函數的參數供調用時使用
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
}
var b = a.fn;
b.bind(a,1,2)() // 3
區別call()、apply()只有第二個參數不一樣,apply的第二個參是數組,bind返回的是一個函數最后必須調用它。