zoukankan      html  css  js  c++  java
  • 云平台项目--学习经验--回调函数中call和apply

    Js中可以通过call和apply来代替另一个对象调用一个方法,将一个函数对象上下文从初始上下文改变为thisObj指定的新对象。简而言之,改变函数执行的上下文,而call和apply的基本区别在于他们传参不同。
    call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null.参数以逗号分开传值,参数可以是任何类型。
    apply(obj,[arg1,arg2,arg3]);apply第一个参数传对象,而参数可以是数组或者arguments对象
    call方法的定义:调用一个对象的另一个方法,以另一个对象替换当前对象。

    由于function()也是对象,所以每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
    例如:
    function sum(a,b){
      return a * b;
    }
    function callSum1(a,b){
      return sum.apply(this,argument);
    }
    function callSum2(a,b){
      return sum.apply(this,[a,b]);
    }
    alert(callSum1(4,5));//20
    alert(csllSum2(4,5));//20

    call()和apply()方法实际上的作用相同,它们的区别仅仅在于接受参数的方式不同,对于call而言,第一个参数this值没有变化,变化的是其余参数都直接传递给函数。这意味着如果使用call()方法,则参数需要一一列举出来:
    function sum(c,d){
      return c * d;
    }
    function callSum1(c,d){
      return sum.call(this,c,d);
    }
    alert(callSum(3,4));//12
    结果可知,使用call()或者apply()都没有区别,取决于用哪种传递方式方便,如果传入的是argument对象或数组,那么使用apply()会更加方便。

    若call()和apply()用于回调函数中,开发过程中需要改变回调函数的执行上下文
    回调函数定义:函数A作为参数传递至另一个函数B中,并且函数B执行函数A。

  • 相关阅读:
    页面布局
    序列化和反序列化
    虚方法、抽象类
    方法的重载 、重写
    C#委托与事件
    C#中的反射
    SQL用法
    Ubuntu:Unable to locate package ***
    Django 使用mysql 所遇到问题一:Error loading MySQLdb module
    python collection 中的队列
  • 原文地址:https://www.cnblogs.com/xizhu/p/9783915.html
Copyright © 2011-2022 走看看