apply和call语句

运动框架的应用实例 结合 异步和回调函数 中的 「回调函数2」
我们可以试图在回调函数中,用this表示oDiv对象,这样感觉爽。

animate(oDiv,{"left":600},2000,function(){
 this.style.backgroundColor = "red";
 });

但是不行,回调函数中this不是oDiv。所以我们现在要想一个办法,让callback运行,并且callback里面的this是oDiv。
callback.call(elem);
或者:
callback.apply(elem);
执行callback函数,并且让callback函数中的this关键字为elem。
例子:

  var obj2 = {
  "name" : "树懒",
  "age" : 16,
  "sex" : "男"
  }
 function huidiao(){
  alert(this.name);
  }
  //下面这个call语句的含义有两层:
  //1 huidiao 函数将被调用
 //2 同时这个函数内部的this就是obj了
  huidaio.call(obj2);

说白了apply、call功能是一样的,功能都是:让函数调用,并且给函数设置this是谁。
call就是英语呼叫的意思,apply是应用的意思。
现在说说区别:

  var obj = {
  "name" : "考拉",
  "age" : 18,
  "jiehun" : false
  }
  function x(a,b,c){
  console.log(this.name);
  console.log(a + b + c);
  } 
  x.call(obj,2,3,4);
  x.apply(obj,[2,3,4]);

call和apply功能一样,就是让一个函数里面的this设置为一个对象。
拿上例来说,x函数里面的this就是obj对象。但是我们发现,x这个函数,有参数。那么我们现在又想设置this是谁,又想把参数往里传,此时就有区别了:

 fn.call(obj,参数1,参数2,参数3……);
 fn.apply(obj,[参数1,参数2,参数3……]);

call需要你用逗号罗列所有参数,但是apply是把所有参数写在数组里面。即使只有一个参数,也必须写在数组里面。
比如:

  function showInfo(n){
  for(var i = 1 ; i <= n ; i++){
  console.log(this.name);}
  }
  showInfo.call(obj,10);
  showInfo.apply(obj,[10]);

一定不要记混,apply要的是数组,你想啊,ly、ly、ly长得像list,就是数组。
总结一下,这两个东西功能一致,就是把一个函数里面的this设置为某个对象。区别就是后面的参数的语法。

你可能感兴趣的:(apply和call语句)