提问人:artwl 提问时间:9/7/2012 最后编辑:artwl 更新时间:9/7/2012 访问量:319
为什么这个 === 窗口在 JavaScript 范围安全构造函数中是假的?
Why this === window is false in JavaScript scope safety constructor?
问:
我的代码是:
(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();
错误信息为:
答:
0赞
RobG
9/7/2012
#1
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))
评论
0赞
9/7/2012
但什么时候会呢?window !== global
0赞
artwl
9/7/2012
使用我得到同样的错误,使用还可以this === global
if (!(this instanceof Test))
0赞
9/7/2012
(我真的看不出[命名]函数表达式在这里是如何应用的。
0赞
9/7/2012
@artwl 好奇,使用时会发生什么?(通过方法。window.Test().play()
this === window
0赞
artwl
9/7/2012
@pst'窗口。Test()' 为 null 或不是对象
评论
window.Test=test;
Test().play();