call&apply&bind的区别
模板
需要改变的this的函数.call(需要指向的对象,参数,参数,参数…)
需要改变的this的函数.apply(需要指向的对象,[参数,参数,参数…])
需要改变的this的函数.bind(需要指向的对象,参数,参数,参数…)
共同点
- 都改变了函数内部的this指向
- 是函数的方法,即只有函数才可以调用它们
不同点
- call和apply都是立即执行,bind不是理解执行,而是返回一个函数
- call和bind,传参传的是参数列表,apply则传参传的是一个参数数组
案例
let cat = { name: "喵喵" }
let dog = {
name: "旺财",
sayName() {
console.log("我是" + this.name);
},
eat(food1, food2) {
console.log("我喜欢吃" + food1 + food2);
}
}
dog.sayName();
dog.sayName.call(cat);
dog.eat("骨头", "🥩")
dog.eat.call(cat, "🐟", "肉");
dog.eat.apply(cat, ["🐟", "肉"])
let fun = dog.eat.bind(cat, "🐟", "肉")
fun();
//我是旺财
//我是喵喵
//我喜欢吃骨头🥩
//我喜欢吃🐟肉
//我喜欢吃🐟肉
//我喜欢吃🐟肉
个人理解
只能是函数使用这三函数,这个函数中所需要的this值,由你添加的那个对象提供,并且如果这个函数需要传递参数的话,就要向其中传递参数。