相同点:
call()、apply()、bind()都是用来重定义this
这个对象的
不同点:
1、调用方式
var obj={
name:'小白',
age:'4',
info:function(){
console.log(this.name+"年龄"+this.age)
}
}
var boy={
name:"小新",
age:'8'
}
obj.info(); // 小白年龄4
obj.info.call(boy); // 小新年龄8
obj.info.apply(boy); // 小新年龄8
obj.info.bind(boy)(); // 小新年龄8
bind
返回的是一个函数形式,如果要执行,则后面要再加一个小括号()
2、传参情况
var obj={
name:'小白',
age:'4',
info:function(f,t){
console.log(this.name+"年龄"+this.age,'来自'+this.f+'去往'+this.t)
}
}
var boy={
name:"小新",
age:'8'
}
obj.info.call(boy,"成都",'上海'); // 小新年龄8 来自成都去往上海
obj.info.apply(boy,["成都",'上海']); // 小新年龄8 来自成都去往上海
obj.info.bind(boy,"成都",'上海')(); // 小新年龄8 来自成都去往上海
obj.info.bind(boy,["成都",'上海'])(); // 小新年龄8 来自成都,上海去往undefined
从上面四个结果不难看出:
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
call 后面传递的参数是以逗号的形式分开的
obj.myFun.call(db,‘成都’, … ,‘string’ )。
apply 传递的参数是数组形式
obj.myFun.apply(db,[‘成都’, …, ‘string’ ])。
bind 除了返回是函数以外,它 的参数和 call 一样。