如何从node.js中的该函数调用struct中的函数?

时间:2018-05-07 16:26:31

标签: javascript node.js

好的,这是我的代码的基本概要

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

3 个答案:

答案 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 };