javascript 中的call 和apply的区别

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

 

posted @ 2016-05-12 15:01  独孤九剑01  阅读(128)  评论(0编辑  收藏  举报