call、apply、bind三者的区别
先构造函数
let xiaowang={ name1:"小王", age:"23", sex:"男", say:function(){ console.log(this.name1+","+this.age+","+this.sex) } } let xiaohong={ name1:"小红", age:"18", 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:"23", sex:"男", say:function(school,like){ console.log(this.name1+","+this.age+","+this.sex+","+school+","+like)
} } let xiaoli={ name1:"小丽", age:"18", sex:"女" } xiaoming.say.call(xiaoli ,"吕梁学院","芒果")------输出----小丽,18,女,吕梁学院,芒果 xiaoming.say.apply(xiaoli,["运城学院","榴莲"])----输出----小丽,18,女,运城学院,榴莲 // call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。