call、apply、bind的用法

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
上一篇:java匿名内部类


下一篇:19_多态应用以及引用类型转换的例子