zoukankan      html  css  js  c++  java
  • Call and Apply in JavaScript

    Call 和 Apply 方法可以用来代替另一个对象调用一个方法,改变this指向。

    1.call
    -call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
    -调用一个对象的一个方法,以另一个对象替换当前对象。
    -call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    具体方法实现见如下示例:

     1 <script type="text/javascript">
     2     function PersonA(){
     3         this.name = 'a' ;
     4         this.say = function(){
     5             console.log('A:' + this.name) 
     6         }
     7     } 
     8 
     9     function PersonB(){
    10         this.name = 'b';
    11 //      console.log('B:' + this.name);
    12     }
    13 
    14     var a = new PersonA();
    15     var b = new PersonB();
    16 
    17     a.say.call(b);
    18 </script>

    其中b对象想要调用a中的say方法,则可通过call来实现。其中call的第一个参数为传入给当前对象的对象b。[后面的参数都是传递给当前对象的参数。]

    运行结果:

    浏览器输出: A:b

    结果表明 call 方法将 this的指向改为了b对象。


    2.apply
    -apply([thisObj[,argArray]])
    -应用某一对象的一个方法,用另一个对象替换当前对象。

    -如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

    apply方法的功能与call一致,不同的地方在于之后的参数,call方法是将参数一个个带进去,而apply是用数组等方式。

    如: a.say.call(b,arg1,arg2,...)

      a.say.apply(b,[arg1,arg2,...])

  • 相关阅读:
    【Github】github图片显示不出
    【Linux】docker安装FastDFS
    【Github】问题解决:Failed to connect to github.com port 443: Operation timed out
    python生成1000w的mysql测试数据
    python 瀑布流
    django使用url路径组合搜索
    将规定的文件以及文件夹,压缩打包
    定期清理iis_log日志文件
    自己开发的python分页插件
    使用IO多路复用selectors模块写上传下载功能
  • 原文地址:https://www.cnblogs.com/zhaoww/p/5247827.html
Copyright © 2011-2022 走看看