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),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
- 核心思想是把多参数传入的函数拆成单参数(或部分)函数,内部再返回调用下一个单参数(或部分)函数,依次处理剩余的参数。