我开始尝试使用 JavaScript 中的发布/订阅模式,但现在遇到了一个我不明白的问题。
采用以下场景:
单击按钮时,会发出一条消息,这有效。
document.getElementById('myBtn').addEventListener('click', function() {
PubSub.publish('topic', data);
});
在我的应用程序的另一部分,我收到了这条消息:
function MyObj() {
this.eventLog = [];
var token = PubSub.subscribe('topic', this.logger);
};
MyObj.prototype.logger = function(message, data) {
this.eventLog.push(data);
}
这里我想将发布的数据存储在MyObj
对象的eventLog
属性中。不幸的是,这不起作用:
Uncaught TypeError: Cannot read property 'eventLog' of undefined
所以看起来 this
的上下文丢失了——当我执行 console.log(this)
时,window
对象被记录.
我知道这
对于初学者来说可能很棘手,但直到现在我总是能够理解正在发生的事情,但这让我完全困惑。当然 MyObj
会在消息发布之前进行初始化,所以我看不出这里有任何问题。有人可以向我解释这里发生了什么吗?
最佳答案
PubSub.subscribe('topic', this.logger.bind(this))
关于JavaScript PubSub 模式 : What is happening with the context of "this", 为什么丢失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30468862/