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/
  • 相关阅读:
    在Myeclipse中移除项目对Hibernate的支持
    使用MyEclipse可视化开发Hibernate实例
    利用MyEclipse自动创建PO类、hbm文件(映射文件)、DAO
    Mtk Camera
    Linux问题,磁盘分区打不开了
    Android SDK在线更新镜像服务器大全
    TeamTalk——ubuntu服务端部署
    Nginx
    VCC/AVCC/VDD/AVDD区别
    android studio and sdk mirror for China
  • 原文地址:https://www.cnblogs.com/tongbiao/p/6845662.html
Copyright © 2011-2022 走看看