zoukankan      html  css  js  c++  java
  • JavaScript call()和apply()

    ECMAScript规范给所有函数都定义了call()与apply()两个方法,call()与apply()的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call()与apply()的不同就是call传的参数可以是任意的,而apply传的剩余参数必须为数组。

    例如:

    function add(a, b) { return a + b; }

    function sub(a, b) { return a - b; }

    /*apply()用法

    * var a1 = sub.apply(add, [4, 2]);

    *var a2 = add.apply(sub, [4, 2]);  

    */

    var a1 = sub.call(add, 4, 2);

    var a2= add.call(sub, 4, 2);

    输出:a1=2  a2=6

     

    感觉还是有意未尽,更有意思的还在下面

    js总是认为他是万能的,既然高级语言会继承,我js也不能示弱:JS模仿继承

      function fun1() {

            this.a = 123;

            this.add = function () { return  this.a }

      }

     function fun2() {

           this.a = 456;

     }

     var f1=new fun1()

     var f2=new fun2()

     var a = f1.add.call(f2);  // a输出的是456

    这里就是把f1的方法拿给f2来使用,f2便可以使用f1中所有的方法,这不正是高级语言中继承的概念喽。当然根据综上可扩展出多继承,使用多个call便可以实现多继承

      function fun1() {

      this.add = function () { return this.a }

      }

      function fun2() {

      this.sub = function () { return this.a-this.b }

      }

      function fun3() {

      this.a = 10;

      this.b = 2;

      fun1.call(this);

      fun2.call(this);

      }

      var f3 = new fun3()

      alert(f3.add());

      alert(f3.sub());如此,想要继承谁就可以继承谁。

  • 相关阅读:
    基础调试命令
    mui 拨打电话
    vue a href="tel" 拨打电话
    vue数据已渲染成 但还是报错 变量 undefined
    表格头部与左侧内容随滚动条位置改变而改变(基于jQuery)
    element popover 不显示/不隐藏问题解决方法
    fatal: The remote end hung up unexpectedly解决办法
    mui.fire 目标页无法监听到 触发事件
    多个定时器任务
    vue router 传参 获取不到query,params
  • 原文地址:https://www.cnblogs.com/wyaocn/p/5795991.html
Copyright © 2011-2022 走看看