好的,这是我的代码的基本概要
MyClass.Factory.create()
正如您可能看到的,我想使用exports.entity = {
name:"Foo",
//Etc...
start:function() {
this.attack();
},
attack:function() {
setTimeout(attack, 1000); //Doesn't work
setTimeout(this.attack, 1000); //Doesn't work
setTimeout(this, 1000); //Doesn't work
}
}
从该函数内部调用attack()
。不幸的是,我所尝试过的一切都没有用,而且我的想法一直不干预。我无法在互联网上找到任何东西。有谁知道我怎么能做到这一点?
注意:
当我说setTimeout
时,我的意思是它给出了一个错误,例如doesn't work
答案 0 :(得分:0)
我通常采取的措施是避免范围问题,即分割功能。然后导出对象。
const attack = () => {
console.log('attacking');
setTimeout(() => {
stop();
}, 1000)
};
const stop = () => {
console.log('stopping');
}
const start = () => {
attack();
}
module.exports = { start, stop, attack }
否则你可以按照评论中的建议绑定(this)。
答案 1 :(得分:0)
setTimeout
有自己的范围,这就是为什么它覆盖了这个
您可以使用bind
或在setTimeout
//using bind
setTimeout((function() {
this.attack();
}).bind(this));
//using variable
var context = this;
setTimeout(context.attack, 1000);
答案 2 :(得分:0)
它看起来像这样:
let entity = {};
entity.name = "Foo";
// Etc...
entity.start = function() {
this.attack();
}.bind(entity);
entity.attack = function() {
console.log('attack');
setTimeout(this.attack, 1000); //Doesn't work
}.bind(entity);
exports = { entity };