Skip to content

call bind apply

December 2, 2022 | 04:58 AM

call bind apply

call

函数调用了call方法,并且把this绑定到egg对象上,使得输出的时候就可以用上对象的属性name了

call就是用来修改this的指向,call也可以调用函数

function person(){
	console.log(this.name)
}
var egg={
    name:'蛋老师'
}
person.call(egg)
//“蛋老师"

call可以传多个参数,第一个参数是要改变的this的指向,往后的参数是往里面传参

let cat={
    name:"喵喵"
}
let dog={
    name:"旺财",
    sayName(){
        console.log("我是"+this.name)
    }
    eat(food){
        cosnole.log("我喜欢吃"+food)
    }
}
dog.eat.call(cat,"鱼")
//我喜欢吃鱼
dog.eat.call(cat,"鱼","肉")
//我喜欢吃鱼肉

bind

bind不会立即执行函数,传参的方式和call是一模一样的,但我们直接调用它是不会有作用的,bind不会调用这个函数,会将这个函数以返回值的方式返回出来

let cat={
    name:"喵喵"
}
let dog={
    name:"旺财",
    sayName(){
        console.log("我是"+this.name)
    }
    eat(food){
        cosnole.log("我喜欢吃"+food)
    }
}
let fun=dog.eat.bind(cat,"鱼","肉")
fun()//我喜欢吃鱼肉

apply

apply传参和call的最大区别是,apply是以数组的形式进行传参

let cat={
    name:"喵喵"
}
let dog={
    name:"旺财",
    sayName(){
        console.log("我是"+this.name)
    }
    eat(food){
        cosnole.log("我喜欢吃"+food)
    }
}
dog.eat.call(cat,"鱼")
//我喜欢吃鱼
dog.eat.call(cat,"鱼","肉")
//我喜欢吃鱼肉

//apply传参和call的最大区别是,apply是以数组的形式进行传参
dog.eat.apply(cat,["鱼","肉"])
//我喜欢吃鱼肉