[英]JavaScript's *this* keyword points to the window from within string.prototype
好的,这可能会为我赢得每日 Headslam 徽章。
为什么在this
代码中指向window
?
if (!String.prototype.Trim)
{
String.prototype.Trim = function()
{
var result = this.replace(/^\s+|\s+$/g, "");
return result;
};
}
据我了解, this
应该评估为当前字符串实例的值。 相反,它正在评估当前的 window object。 因此,以下内容惨遭失败:
var baz = 'foo bar '.Trim();
请注意,此代码已经使用了很长一段时间,并且基于我在 intartoobs 上到处看到的广告代码。 所以这种模式似乎是推荐的方式。 我不明白为什么this
没有指向我认为它应该指向的数据。 (在 Visual Studio 中,当我在它上面 hover 或在 Watches window 中查看它时,它显示为[object window]
)。
(IE 8 [32 位];Win7;plain-ole HTML 页面。)
在Visual Studio中,当我将鼠标悬停在它上面或在Watches窗口中查看它时,它显示为[对象窗口]
听起来像VS中的范围解析错误。 这不可能是IE中的错误,否则数以千计的原型功能就会破坏。
我最近遇到了这个问题,发现原因是JS捆绑包破坏了我的代码。 我能够通过在匿名函数中包含修改String.prototype
代码然后调用它来修复它。
所以代替:
String.prototype.myFunction = function () { ... }
我不得不写:
(function () {
String.prototype.myFunction = function () {
...
}
})();
例如,当 function 名称后面的括号丢失时,我遇到了这个问题
错误
'My String'.myFunction
使固定
'My String'.myFunction()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.