call、apply、bind 的用法分别是什么?

116 阅读1分钟

1、call的用法 call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

let food={
    name:'apple',
    fruit(a,b){
        console.log(a+b)
        console.log(this.name)
    }
}
food.fruit.call(food,1,2) //output: "3"  "apple"
food.fruit.call({name:"orange"})  //output:"NaN"  "orange"

2、apply的用法 与call() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。

let numbers=[1,2,3]
let food={
    name:'apple',
    fruit(a,b){
        console.log(a+b)
        console.log(this.name)
    }
}
food.fruit.apply(food,numbers) //output:"3" " apple"
food.fruit.apply({name:"orange"})  //output:"NaN" "orange"

3、bind 的用法 bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

const fruit = {
  name: "apple",
  getName: function(){
    return this.name;
  }
};
const unGetName = fruit.getName; //该函数被全局调用
console.log("unGetName:"+unGetName());  //output: 空或undefined
const GetName = fruit.getName.bind(fruit);
console.log("GetName:"+GetName()) //output: "apple"