区别
call()、bind()、apply()都是用来重新定义this对象的指向的。作用都是相同的,只是传参的方式不同。
第一个参数都是'.'前面的函数this的指向,第二个参数是给'.'前面的函数传的实参。call可以接受列表,apply只接受一个数组,bind和call一样,但bind不改变原函数,而是返回一个新函数,所以必须调用才能执行。call和apply是直接调用了原函数,但只改变当前调用下的this值,下一次调用this值还原。
语法
函数.call(this指向,'参数1','参数2','参数3')
函数.apply(this指向,['参数1','参数2','参数3'])
函数.bind(this指向,'参数1','参数2','参数3')()
bind(……,……,……)返回的是一个新函数,必须重新调用(加括号)才能执行
例子:
var name="小月",age=19;
var obj={
name:'小王',
objAge:this.age,
myFun:function(fm,t){
console.log(this.name+'年龄'+this.age,'来自'+fm+'去往'+t)
}
}
var db={
name:'小一',
age:99
}
obj.myFun.call(db,'成都','上海'); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.apply(db,['成都','上海']); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db,'成都','上海')(); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])(); // 德玛 年龄 99 来自 成都, 上海去往 undefined