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

  • 相关阅读:
    js弹出DIV层
    .net 生成静态页面
    新开博客
    随机生成验证码
    ASP.NET错误处理方法总结
    webgis
    看樱花
    今天转载的笑话,挺好笑呵
    用Tomcat插件在Eclipse上搭建可跟踪调试的J2EE WEB开发环境
    关于JSTL的简单说明
  • 原文地址:https://www.cnblogs.com/LeoXnote/p/13048228.html
Copyright © 2011-2022 走看看