相同点:三者都是用来重定义this指向
区别:bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
call
语法
function.bind(obj, ...arguments)
参数
- obj
需要改变this的对象
- …arguments
一连串的参数,call必须是以这一样的形式
例子
let obj={
name:'xiaoming'
}
let obj1={
name: 'xiaocheng',
fun: function(){
console.log(this.name);
console.log(...arguments);
}
}
obj1.fun.call(obj, 'xiaolin','xiaoli') //xiaoming
//xiaolin xiaoli
apply
语法
function.bind(obj, [arg1,arg2,arg3])
参数
以数组的形式
bind
bind()方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
语法
function.bind(thisArg, ...arguments)
参数
- thisArg
必填,需要改变this的对象
- …arguments
与call相同
例子
const module = {
x: 42,
getX: function () {
return this.x;
}
};
const unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// expected output: undefined
const boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// expected output: 42
参考文章:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
https://www.cnblogs.com/moqiutao/p/7371988.html