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/
  • 相关阅读:
    ==和equals
    java 多重继承
    java单例模式
    基础小知识
    print流之错误日志
    print流
    实现读文本文件(IOl流)
    缓冲流(数据的复制粘贴)IO流
    力扣20题、1047(括号合法性,删除字符串中的所有相邻重复项)
    力扣232题、225题(栈实现队列,队列实现栈)
  • 原文地址:https://www.cnblogs.com/tongbiao/p/6845662.html
Copyright © 2011-2022 走看看