Uncaught TypeError:this.method不是一个函数 – Node js class export

我是新的node.js,我想要一个类。 我已经使用https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes作为参考。 但是,当我这样做,例如:

// talker.js class Talker { talk(msg) { console.log(this.say(msg)) var t = setTimeout(this.talk, 5000, 'hello again'); } say(msg) { return msg } } export default Talker // app.js import Talker from './taker.js' const talker = new Talker() talker.talk('hello') 

我得到:

talker.js:4 Uncaught TypeError:this.say不是一个函数

应该说,app.js是electron.js渲染器进程,它使用rollup.js

任何想法,为什么这将是?

更新:对不起,我忘了添加在伪代码中添加一行。 实际上,当我用callback调用setTimeout时会发生这种情况。 我已经更新了代码。

你正在失去对你的方法的束缚。

由此改变:

 setTimeout(this.talk, 5000, 'hello again'); 

对此:

 setTimeout(this.talk.bind(this), 5000, 'hello again'); 

当你把this.talk作为一个函数parameter passing的this.talk ,它需要this函数来查找方法talk并且传递一个对这个函数的引用。 但是,它只传递了该函数的引用。 与你所拥有的物品不再有任何关联。 .bind()允许你将一个引用传递给一个很小的stub函数, this函数会跟踪this函数,并把你的方法调用this.say() ,而不仅仅是say()

你可以看到同样的事情,如果你只是这样做:

 const talker = new Talker();' const fn = talker.say; fn(); 

这会产生同样的问题,因为将该方法分配给fn根本不需要与之talker 。 这只是一个函数引用,与对象没有任何关联。 事实上:

 talker.say === Talker.prototype.say 

.bind()所做的是创build一个小的stub函数,它将保存对象值,然后使用该对象调用您的方法。