• js学习-apply,call,bind的实现


    目录

    apply

    简单说:构建一个和调用aplly函数一样的字符串,用eval执行,完了之后删除掉,最后返回执行的结果。

    Function.prototype.applyCopy = function() {
      var obj = arguments[0];
      obj.fn = this;
      var args = arguments[1];
    
      if(!args || args.length == 0) return obj.fn();
    
      // obj.fn参数
      var argsStr = '';
    
      for(var i in args) {
        argsStr += '"' + arguments[1][i] + '",';
      }
    
      var result = eval('obj.fn('+argsStr.replace(/,$/, '')+')');
      
      delete obj.fn;
      return result;
    };  
    

    call

    Function.prototype.callCopy = function() {
      var obj = [].shift.applyCopy(arguments);
      return this.applyCopy(obj, arguments);
    }
    

    bind

    Function.prototype.bindCopy = function() {
      var _this = this;
      var obj = arguments[0];
      return function() {
        return _this.applyCopy(obj, arguments);
      }
    }
    

    demo

    var s = {
      desc: 's.desc',
      name: '你好',
    }
    
    var name = 'window';
    var desc = 'window => this'
    
    function sayHi(age, type) {
      return {
        name: this.name,
        desc: this.desc,
        age: age,
        type: type
      }
    }
    
    console.log(sayHi(12,'sayHi'));
    console.log(sayHi.applyCopy(s, [12, 'applyCopy']));
    console.log(sayHi.callCopy(s, 12, 'callCopy'));
    console.log(sayHi.bindCopy(s)(12, 'bindCopy'));
    

    总结:apply是基础,call,bind都是在apply的基础上实现的。

  • 相关阅读:
    VFL使用
    深复制与浅复制&&strong,copy修饰符总结
    数组的三种查找方法
    开发技巧-代码块使用
    2 duplicate symbols for architecture“文件冲突”
    利用echarts画折线图圆饼
    tab栏切换2
    利用highcharts.js画圆饼
    tab切换
    file上传图片并展示
  • 原文地址:https://www.cnblogs.com/meetqy/p/11848475.html
Copyright © 2020-2023  润新知