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。

  • 相关阅读:
    Netty实现Unity登录验证(三)
    Netty实现Unity登录验证(二)
    Netty实现Unity登录验证(一)
    Unity RPC 链接
    摄像机跟随物体,修复物体遮挡
    Character Shader 含半透明及受击效果
    空Shader重新指认工具
    Box波浪运动的一种实现
    查找所有有多个 Texture 的 Matrial
    数据生成XML导入Excel
  • 原文地址:https://www.cnblogs.com/xizhu/p/9783915.html
Copyright © 2011-2022 走看看