javascript 中的call 和apply的区别

一直对call 和apply很模糊,今天终于搞懂了,分享出来给你们。前端

apply call bind方法

var ZS = {web

  name:"张三",canvas

  sex : "男",数组

  age : "25岁",前端工程师

  say :function(){app

       console.log(this.name+","+this.sex+",今年"+this.age)函数

  }this

}

spa

 

var LS = {it

 

  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方法中一一对应的)

相关文章
相关标签/搜索