zoukankan      html  css  js  c++  java
  • 多重继承 -Javascript中的apply与call详解

    举例

    //定义一个函数 function add(x, y) { return x + y; } //用call 来调用 function myAddCall(x, y) { //调用 add 方法 的 call 方法 return add.call(this, x, y); } //apply 来调用 function myAddApply(x, y) { //调用 add 方法 的 applly 方法 return add.apply(this, [x, y]); } console.log(myAddCall(10, 20)); //输出结果30 console.log(myAddApply(20, 20)); //输出结果40

     eg2: 

    function isArray1(obj) {
      return Object.prototype.toString.call(obj) === '[object Array]';
    }
    let o1 = {
      a: '1'
    };
    console.log(isArray1(o1))
    console.log(o1.toString() === '[object Array]')
    

     add: bind

    var obj = {
      a: 1,
      b: 2,
      getCount: function(c, d) {
        return this.a + this.b + c + d;
      }
    };
     
    Function.prototype.bind = Function.prototype.bind || function(context) {
      var that = this;
      return function() {
        // console.log(arguments); // console [3,4] if ie<6-8>
        return that.apply(context, arguments);
     
      }
    }
    window.a = window.b = 0;
    var func = obj.getCount.bind(obj);
    console.log(func(3, 4));  // 10
    

     

    eg3:

            var x = 0;
            function test(option) {
                if(option){
                console.log(option );
                console.log(option.x);
                console.log(this)
                }
            }
    
            var o = {};
            o.x = 1;
            o.m = test;
            o.m.apply(); //0
            o.m.apply(o,[{x:2}]); //1
    

      
    apply与call 实际是改变被执行函数的上下文;
    补充:

    a.call(b);

    a.apply(b,[])

    apply与call 实现函数的继承

     本质是实现 a 对象到b对象的继承 ,既 b继承a / b包含了a 的所有参数和函数 并传参数给a  参数形式不同,在对象b的作用域下 执行了函数a,

    https://www.tongbiao.xyz/
  • 相关阅读:
    清除3389远程桌面连接记录的批处理
    Visual Studio Team Foundation Server 2013
    Build fast jar 打包,增加配置文件
    Asp.net MVC 出现“Failed to map the path '/'.”错误
    Java创建AD(Active Directory)域控制器用户 (未测)
    JSP/java 执行创建批处理文件,并执行批处理事务。
    域控密码策略
    项目感悟
    IE版本的标准定义
    VS编译后事件
  • 原文地址:https://www.cnblogs.com/tongbiao/p/6845662.html
Copyright © 2011-2022 走看看