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,它会打印undefinedand 123。
似乎第二种方式bar被称为价值this不是我所期望的。我希望它是,myNamespace但它似乎是window。
这让我想到了两个问题:
- 有没有办法让
this值bar始终指向内部,myNamespace而不管它是从哪里调用的? myNamespace.用硬编码代替this.inside of会更合适bar吗?