var obj1={
name:'obj1',
sendMsg:function(source,num){
console.log(num+':'+source+'更改了this指向现在的this是',this.name);
}
}
var obj2={
name:'obj2'
}
obj1.sendMsg.call(obj2,'obj1',1)
obj1.sendMsg.apply(obj2,['obj1',2])
obj1.sendMsg.bind(obj2,'obj1',3)() // obj1.sendMsg.bind(obj2)('obj1',3)参数写这里也可以
联系:他们的第一个参数都是要指向的对象,第二个参数是要传递的参数
区别:
- call和apply直接调用函数,而bind返回的仍然是一个函数,需要对返回的函数再调用才行
- call和apply 的参数要放到数组里面
注:如果用的是箭头函数,用上面这三种方法都不会改变this的指向的