call、apply、bind的作用
它們都是爲了改變方法內部this的指向。
call、apply怎麼區別?
- call和apply第一個參數均爲this的指向
- call的其餘參數就是一個普通的參數列表。
- apply除了第一個參數外,只接受一個數組類型的參數。
call的用法
var obj = {
name: "zky",
}
function get(age,sex) {
console.log("名字"+this.name+" 年齡"+age+" 性別"+sex)
}
get.call(obj,22,'男') //打印 名字zky 年齡22 性別男 此時的this通過call方法 指向了obj
apply的用法
var obj = {
name: "zky",
}
function get(age,sex) {
console.log("名字"+this.name+" 年齡"+age+" 性別"+sex)
}
get.apply(obj,[22,'男']) //打印 名字zky 年齡22 性別男 此時的this通過call方法 指向了obj
bind與call和apply的區別
- 第一個參數爲this的指向,其餘參數是一個普通的參數列表(這一點跟call很像) 返回的是一個函數,需要再調用一下
var obj = {
name: "朱康宇",
}
function get(age,sex) {
console.log("名字"+this.name+" 年齡"+age+" 性別"+sex)
}
get.bind(obj,22,'男')() //這裏注意 需要()去調用一下這個bind方法 因爲他返回的是一個函數
//或者這樣寫(柯里化)
get.bind(obj).bind(null,22).bind(null,'男')() //這裏的this指向依賴宇第一個bind中傳入的參數
這裏簡單說下柯里化是什麼意思
- 柯里化(Currying),又稱部分求值(Partial Evaluation),是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且返回結果的新函數的技術。
- 核心思想是把多參數傳入的函數拆成單參數(或部分)函數,內部再返回調用下一個單參數(或部分)函數,依次處理剩餘的參數。