【发布时间】:2015-09-20 13:22:34
【问题描述】:
我在 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 不应该指的是全局对象吗?
【问题讨论】:
-
哦....我现在知道了...闭包作为 deentityify 方法返回,
-
你不能仅仅通过分析函数定义来假设
this的值。例如var fn = String.deentityfy; fn(); //this === window。这就是你如何调用你的函数以及你如何绑定它。 -
是的,我明白了,我没有在这个问题中包括,事后看来应该是执行上下文......实际上我确实在问题结束时描述了执行上下文“ ...执行此方法的字符串对象"
-
执行上下文是“somestring”.deentityify()
标签: javascript closures this