• 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 是无法生效的。

  • 相关阅读:
    App Submission Issues
    番茄钟App(Pomodoro Tracker)
    WatchKit App Submission Issues
    Watch​Kit Learning Resources
    Scrum Planning Card
    How to get cocoapods work on Yosemite
    如何在DigitalOcean安装Ghost
    Swift学习资源
    Xcode 6 模拟器路径
    【Android-4】Scheme跳转协议
  • 原文地址:https://www.cnblogs.com/LeoXnote/p/13048228.html
Copyright © 2020-2023  润新知