zoukankan      html  css  js  c++  java
  • js难题记录

    Function.prototype.bind = Function.prototype.bind || 
    function (context, ...args1) {
    var _this = this
    
    return function(...args2) {
    return _this.call(context, ...args1, ...args2)
    }
    }
    // bind,实现的机制就是Currying.
    var a  = {
     
          name: 'a',
     
          getName: function () {
     
          console.log(this.name);
     
          }
     
          }
     
          var b = {
     
          name : 'b'
     
          }
     
          var c =  {
     
          name: 'c'
     
          }
     
          var fn1 = a.getName.bind(b);
     
          var fn2 = a.getName.bind(b).bind(c);

    运行以下代码

     fn1(); // b
    
     fn2(); // b(为什么???)
    
     a.getName(); // a

     2020.06.17补充

    之前对于fn2()运行结果为b表示不理解,最近找到了答案

    因为多次bind绑定只有第一次生效

    原因是,在Javascript中,多次 bind() 是无效的。更深层次的原因, bind() 的实现,相当于使用函数在内部包了一个 call / apply ,第二次 bind() 相当于再包住第一次 bind() ,故第二次以后的 bind 是无法生效的。

  • 相关阅读:
    Pycharm创建Django项目示例
    Window下MyCat的下载与安装
    Python中使用xlrd、xlwt、xlutils读写Excel文件
    循环队列(Java实现)
    oracle 创建表
    win10 删除文件卡在99%
    python xx005文件操作
    python xx004集合
    python xx003字典
    不理解
  • 原文地址:https://www.cnblogs.com/LeoXnote/p/13048228.html
Copyright © 2011-2022 走看看