call、apply、bind三者的区别

时间:2020-12-02 08:05:59
先构造函数
let xiaowang={
name1:"小王",
age:"",
sex:"男",
say:function(){
console.log(this.name1+","+this.age+","+this.sex)
}
}
let xiaohong={
name1:"小红",
age:"",
sex:"女"
}
  调用xiaowang
xiaowang.say()-----输出的是 小王,23,男   用call方法
xiaowang.say.call(xiaohong)------输出的是 小红,18,女   用apply方法
xiaowang.say.apply(xiaohong)------输出的是 小红,18,女   用bind方法 bind返回的是函数所以后面加上()
xiaowang.say.bind(xiaohong)()-----输出是 小红,18,女
//所以call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
  然后我们来看call和apply的区别
let xiaoming={
name1:"小明",
age:"",
sex:"男",
say:function(school,like){
console.log(this.name1+","+this.age+","+this.sex+","+school+","+like)
        }
}
let xiaoli={
name1:"小丽",
age:"",
sex:"女"
}
xiaoming.say.call(xiaoli ,"吕梁学院","芒果")------输出----小丽,18,女,吕梁学院,芒果
xiaoming.say.apply(xiaoli,["运城学院","榴莲"])----输出----小丽,18,女,运城学院,榴莲
// call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。