JavaScript:引用 'this' 关键字的闭包

标签 javascript closures this

我在 Douglas Crockfords 的“JavaScript - The Good Parts”中看到的以下示例似乎破坏了我目前对 this 在闭包中应如何工作的理解:

    String.method('deentityify', function(){
          var entity = {
              quot: '"',
              lt: '<',
              gt: '>'
          };

         return function(){
                return this.replace(/&([^&;]+);/g, 
                    function(a,b){
                        var r = entity[b];
                        return typeof r === 'string' ? r : a;
                    } 
       };
}());   


//Just for reference
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};

deentityify 方法闭包中引用的 this 指的是执行该方法的字符串对象。这对我来说不太有意义 - 这里的 this 不应该引用全局对象吗?

最佳答案

如果我们在没有良好的作用域(即使用难看的全局变量)和方法绑定(bind)方法的情况下编写此代码,您将得到:

var entity = {
  quot: '"',
  lt: '<',
  gt: '>'
};

String.prototype.deentityify = function(){
  return this.replace(/&([^&;]+);/g, 
    function(a,b){
      var r = entity[b];
      return typeof r === 'string' ? r : a;
    }
  );
};

var s = "&lt;".deentityify();

因此,deentityify 只是 String 对象上的一个方法。当您使用点语法调用该方法时,该方法的上下文就是您调用它的字符串。

关于JavaScript:引用 'this' 关键字的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679867/

相关文章:

JavaScript 命名空间和 jQuery 事件处理程序

c# - XSS 改变 ASP.NET session 状态

groovy - Groovy 中的惰性映射值

javascript - 访问构造函数创建的对象中的属性

Javascript 闭包 : Memory Leak

php - 对 PDO FETCH 指令使用闭包

Javascript 'this' 嵌套函数内的关键字

javascript - 重置特定表格中的值,这些值是在单击重置按钮时编辑的

javascript - 在HTML5 Canvas 上慢慢绘制二次曲线

javascript - Chrome 扩展 NativeMessaging 'connectNative' 未定义