以下示例,我在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;
};
this
方法的闭包中引用的deentityify
引用执行此方法的字符串对象。这对我来说没有意义 - 这里this
不应该引用全局对象吗?
答案 0 :(得分:3)
如果我们在没有很好的范围(即使用丑陋的全局变量)和方法绑定方法的情况下编写这个,你得到:
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 = "<".deentityify();
因此,deentityify
只是String
对象上的一种方法。使用点语法调用方法时,方法的上下文是您调用它的字符串。