在JavaScript中this关键字问题
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
<script>
(function(){
var myLib = function (selector) {
console.log(this);
if(this === window) {
console.log('first if statement executed');
console.log(this);
return new myLib(selector);
}
if(this.window === window){
console.log('second if statement executed');
console.log(this);
return new myLib(selector);
}
};
//expose myLib to the global window object
window.myLib = myLib;
})();
myLib('.someclass')
</script>
在Firefox中,这是被记录到控制台:
窗口
第一个if语句执行
对象{}
在JavaScript中this关键字问题
在IE8,这是什么得到登录到控制台:
窗口
秒如果执行语句
风流
对象{}
为什么当MYLIB调用这不是指向IE窗口,而是this.window点的窗口?
window
很奇怪。它既是window
对象又是全局作用域对象。
由于window
是[全球背景]那么这个工程:
var o = 5;
window.o === 5; // true
由于window
是一个全局变量,然后window.window === window
事实上,在IE8 window !== this
是因为IE8恨你。 IE8真的搞砸了它实施window
作为全球背景和作为一个全球变量的方式。
为了解决代码问题变化
window.myLib = myLib;
到
window.myLib = function() {
return new myLib();
};
有趣的是,我只是想链接到你之前关于这个问题:http://*.com/questions/4850978/ – 2011-04-21 21:46:02
@MattBall在那个问题,我没有特别检查'窗口===这个' – Raynos 2011-04-21 21:47:17
谢谢,我不知道IE的窗口的不同实现。 – skaterdav85 2011-04-25 20:43:59
,如果你想避免调用MYLIB而不调用构造函数,你可以做这样的事情:
function myLib(){
if(!(this instanceof myLib)){
return new myLib();
}
}
谢谢。我只是用这个而不是检查这个指向的内容,看到IE的窗口实现,这个指向与其他浏览器不同。 – skaterdav85 2011-04-25 20:44:36
简短版本:对于'window',IE很奇怪。 – 2011-04-21 21:39:40