this
关于 JavaScript 中的命名空间,我似乎遇到了一些问题。具体来说,每当我调用命名空间函数时,setTimeout
或者setInterval
我似乎不再使用this
.
例如,考虑以下代码:
var myNamespace = {
myVar: 123,
foo: function () {
console.log('Inside foo');
console.log('this.myVar = ' + this.myVar);
console.log('myNamespace.myVar = ' + myNamespace.myVar);
// This works excactly as expected, it prints 123 and 123
this.bar();
// This does not, it prints undefined and 123
setTimeout(this.bar, 250);
},
bar: function () {
console.log('Inside bar');
console.log('this.myVar = ' + this.myVar);
console.log('myNamespace.myVar = ' + myNamespace.myVar);
}
}
myNamespace.foo();
什么时候bar
被直接从foo
一切工作中直接调用,就像我期望的那样:它打印123
和123
.
但是,当bar
从 调用时setTimeout
,它会打印undefined
and 123
。
似乎第二种方式bar
被称为价值this
不是我所期望的。我希望它是,myNamespace
但它似乎是window
。
这让我想到了两个问题:
- 有没有办法让
this
值bar
始终指向内部,myNamespace
而不管它是从哪里调用的? myNamespace.
用硬编码代替this.
inside of会更合适bar
吗?