zoukankan      html  css  js  c++  java
  • apply和call的用法

    【原创】apply和call的用法

    查了大量的资料, 经过N次测试, 总结如下(希望给像我一样的菜鸟有帮助)

    apply:
       方法名A.apply(对象名B, [执行A需要的参数,用数组表示]);
    call:
       方法名A.call(对象名B, [执行A需要的参数,用逗号分隔]);

      apply和call功能是: 执行某一个对象的方法A, 但在执行的时候临时把它内部的this指向一个别的对象B, 后面是执行A要用到的参数.
      apply和call作用一样, 区别只不过是参数一个要用数组表示, 一个要用逗号分隔的方式表示. 看例子

    function obj1()
    {
        this.arg = 1;
        this.M = function (a, b){ return this.arg + a + b;}
    }
    function obj2()
    {
         this.arg = 2;
    }
    var k1 = new obj1();
    var k2 = new obj2();

    上面定义了两个对象它们都有arg这个属性, 一个为1, 一个2, 当我们执行
    k1.M(10, 20) 时, 得到31, 也就是说:

    k1.M(10, 20) == 31 //此时this为k1, arg为1, 这句好理解

    再看语句: k1.M.apply(k2, [10, 20])

    这句意思是说: 执行k1对象的M方法, 但在执行的时候把该方法内部出现的this指向k2, 同时把10, 20这2个参数传给M.

    由于k1.M在执行时,内部this指向了k2, 而k2的arg属性值为2, 因此
    this.arg + a + b = 2 + 10 + 20 = 32, 也就是说:

    k1.M.apply(k2, [10, 20]) == 32; //因为M内部this不再指向k1, 而指向k2

    要用call方法, 只需要把后面参数换成用逗号分隔的就行, 即:
    k1.M.call(k2, 10, 20)

    申明: 我也是菜鸟, 有错的地方请指出. 之所以写这个, 是因为看到好多教材上都说什么绑定绑定的, 完全看不懂.
  • 相关阅读:
    方法永远比借口多
    node.js学习在页面上传图片并显示例子
    (转)负载大逃亡:四十二路怪兽联军及七条逃生法则
    node.js学习一例子
    node.js学习总结
    UML项目应用理解快速了解整个系统架构和详细设计文档
    position与relative的区别
    人生有四件事不可以等待
    这是我的第一篇文章
    麦咖啡8.5i 使用设置图解
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1566474.html
Copyright © 2011-2022 走看看