call
call是一个方法,是函数的方法
call可以调用函数,call可以改变函数中this的指向
call和apply
相同点:都会调用函数
不同点:传参的方式不同,call传参时一直往后加参数,apply传参数是以数组的形式传参
call和bind
相同点:传参的方式一样
不同点:call会调用函数,bind不会调用函数,它会作为一个返回值返回一个函数,然后才可以调用
例子一:
function fun(){
console.log('调用')
}
fun.call()//打印了 调用
例子二
function fun(){
console.log(this)
}
fun.call()//this指向了window
例子三
function fun(){
console.log(this.name)
}
fun.call(cat)//打印了 喵喵
let cat = {
name:'喵喵'
}
例子四:
let dog = {
name:'旺财',
sayname(){
console.log("我是"+this.name)
},
eat(food){
console.log("我喜欢吃"+food)
},
eat1(food,food1,food2){
console.log("我喜欢吃"+food+food1+food2)
}
}
dog.sayname()//打印出 我是旺财
dog.sayname.call(cat)//打印出 我是喵喵
dog.eat("骨头")//打印出 我喜欢吃骨头
dog.cat.call(cat)//打印出 我喜欢吃undefined
dog.eat.call(cat,'鱼')//我喜欢吃鱼
dog.eat.call(cat,'鱼','肉','水果')//我喜欢吃鱼肉水果
dog.eat.appiy(cat,['鱼','肉','水果'])
dog.eat.bind(cat,'鱼','肉','水果')//什么也不会打印出来 bind的传参方式和call一样,但是唯一不一样的是bind他不会调用函数,他会作为一个返回值,返回一个函数,然后再将这个函数调用(他会把一个函数已返回值的方式返)回出来
let fun = dog.eat.bind(cat,'鱼','肉','水果')
fun()//打印出 我喜欢吃鱼肉水果