一直对call 和apply很模糊,今天终于搞懂了,分享出来给大家。
apply call bind方法
var ZS = {
name:"张三",
sex : "男",
age : "25岁",
say :function(){
console.log(this.name+","+this.sex+",今年"+this.age)
}
}
var LS = {
name:"李四",
sex : "女",
age : "28岁"
}
ZS.say(); // 张三,男,今年25岁
张三有个say 方法,可以console我的个人信息 。
如何用张三的say方法显示李四的个人信息呢?
ZS.say.apply(LS); // 李四,女,今年28岁
ZS.say.call(LS); // 李四,女,今年28岁
ZS.say.bind(LS)(); // 李四,女,今年28岁
!注意 张三并没有把say给李四,李四根本没有say方法。
如果直接写xw.say.bind(xh)是不会有任何结果的,看到区别了吗?
call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
call 和apply的区别
var WW = {
name:"王五",
sex : "男",
age : "30岁",
say :function(company,position){
console.log(this.name+","+this.sex+",今年"+this.age+",目前就职于"+company+",职位是:"+position);
}
}
var ZL = {
name:"赵六",
sex : "女",
age : "33岁"
}
WW.say("阿里","web前端工程师"); //王五,男,今年30岁,目前就职于阿里, 职位是:web前端工程师
通过call和apply让赵六也可以用这个say方法
WW.say.call(ZL,"百度","canvas工程师"); // 赵六,女,今年33岁,目前就职于百度,职位是:canvas工程师(call后面的参数与say方法中是一一对应的);
WW.say.call(ZL,"百度",["百度","canvas工程师"]); // 赵六,女,今年33岁,目前就职于百度,职位是:canvas工程师(apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的)