JavaScript的* this *关键字指向string.prototype中的窗口

时间:2011-04-01 18:43:14

标签: javascript prototype this

好的,这可能会让我获得Headslam of the Day徽章。

为什么this在以下代码中指向window

if (!String.prototype.Trim)
{
    String.prototype.Trim = function()
    {
        var result = this.replace(/^\s+|\s+$/g, "");
        return result;
    };
}

据我了解,this应该评估当前字符串实例的值。相反,它正在评估当前的窗口对象。因此,以下失败了:

var baz = 'foo bar      '.Trim();

请注意,此代码已经使用了相当长的一段时间,并且基于我在intartoobs上广告中看到的代码。所以这种模式似乎是推荐的做法。我无法弄清楚为什么this没有指向我认为它应该指向的数据。 (在Visual Studio中,当我将鼠标悬停在它上面,或在“监视”窗口中查看它时,它显示为[object window])。

(IE 8 [32位]; Win7;普通HTML页面。)

2 个答案:

答案 0 :(得分:1)

  

在Visual Studio中,当我将鼠标悬停在上面时   它,或在手表窗口中查看,   它显示为[对象窗口]

听起来像VS中的范围解析错误。这不可能是IE中的一个错误,否则数以千计的原型函数就会崩溃。

答案 1 :(得分:0)

我最近遇到了这个问题,发现原因是JS捆绑器修改了我的代码。我可以通过将修改String.prototype的代码包含在匿名函数中,然后调用它来解决此问题。

所以代替:

String.prototype.myFunction = function () { ... }

我必须写:

(function () {
    String.prototype.myFunction = function () {
        ...
    }
})();