在改變 this
指向的時候,常常會把這三個方法混淆,下面就詳細的整理一下三者的用法和區別數組
var a = { name: '張三' } var b = { name: '李四', sayName: function (a,b,c) { console.log(this.name, a+b+c) } } b.sayName.call(a, 1,2,3) // 輸出 --> 張三 6
var a = { name: '張三' } var b = { name: '李四', sayName: function (a,b,c) { console.log(this.name, a+b+c) } } var arr = [1,2,3] b.sayName.apply(a,arr) // 輸出 --> 張三 6
var a = { name: '張三' } var b = { name: '李四', sayName: function (a,b,c) { console.log(this.name, a+b+c) } } var c = b.sayName.bind(a,1,2,3) // 需手動調用新函數 c 纔會執行 c() // 輸出 --> 張三 6
null/undefined
,this默認指向window
null/undefined
,this默認指向undefined
這裏用一個表格來展現吧,可能看起來要稍微直觀點app
方法名 | 可含參數個數 | 是否自動執行 |
---|---|---|
call | 無數個 | 是 |
appy | 兩個,第二個必須爲數組 | 是 |
bind | 無數個 | 否,會返回一個新函數 |