javascript - 为什么这个 === 窗口在 JavaScript 作用域安全构造函数中是假的?

标签 javascript constructor window this

我的代码是:

(function(){
    var test=function(){
        if(this === window)
            return new test();
    }

    test.prototype.play = function(){
        alert("Hello");
    };

    window.Test=test;
})();

window.onload=function(){
    Test().play();
};

这在 IE9+ firefox chrome 中可以很好地工作,但是在 ie 6/7/8 中, Test().play(); 中显示错误,谁能告诉我为什么?

错误信息为:

enter image description here

最佳答案

IE 对函数表达式有一些怪癖,请考虑(未在 IE 8 中测试,因为我目前没有它):

(function(global){

    function test() {
        if (this === global)
            return new test();
    }

    test.prototype.play = function(){
        alert("Hello");
    };

    global.Test = test;

})(this);

window.onload = function(){
    Test().play();
};

另一种测试是:

    if (!(this instanceof Test))

关于javascript - 为什么这个 === 窗口在 JavaScript 作用域安全构造函数中是假的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12311486/

相关文章:

javascript - 哈希和数字

javascript - 如何将基于标准的样式应用于 Kendo UI 网格?

c++ - "Expected constructor, destructor, or type conversion before ' < ' token"

Java:获取窗口颜色

c++ - 如何访问窗口的内部位图?

javascript - Kurento:如何制作自定义过滤器?

javascript - 如何在保留所有环境的情况下暂停 Node REPL 并在稍后阶段恢复?

java - 为 Shoe 类创建 UML 图

java - 我应该使用静态列表还是创建并返回列表的静态方法?

asp.net-mvc-3 - mvc3检测网站(应用程序)正在关闭