let animal1 = {
type: "鼠",
eat(food) {
console.log(`${this.type}吃${food}`);
},
};
let animal2 = {
type: "猫",
};
animal1.eat("玉米"); //鼠吃玉米
animal1.eat.call(animal2, "鼠"); //猫吃鼠
animal1.eat.apply(animal2, ["鼠"]); //猫吃鼠
animal1.eat.bind(animal2, "鼠")(); //猫吃鼠
结论:call,apply,bind的第一个参数都是this,第二个参数都是其他参数,不同的是:
- call中的参数可以有很多,用逗号分隔开。
- apply中,第二个参数必须是数组,来存放其他参数。
- bind中,fn.bind(x,y,z,...)会返回一个函数,fn.bind(x,y,z,...)()才会执行fn