Sve*_*ven 3 javascript publish-subscribe
我开始尝试使用JavaScript中的发布/订阅模式,但现在面临一个我不明白的问题.
采取以下方案:
在按钮单击时,会发出一条消息,这是有效的.
document.getElementById('myBtn').addEventListener('click', function() {
PubSub.publish('topic', data);
});
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的另一部分中,我收到此消息:
function MyObj() {
this.eventLog = [];
var token = PubSub.subscribe('topic', this.logger);
};
MyObj.prototype.logger = function(message, data) {
this.eventLog.push(data);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想将已发布的数据存储eventLog在MyObj对象的属性中.不幸的是,这不起作用:
Uncaught TypeError: Cannot read property 'eventLog' of undefined
Run Code Online (Sandbox Code Playgroud)
所以似乎this丢失了上下文- 当我这样做时console.log(this),window对象被记录下来.
我知道this对初学者来说可能很棘手,但直到现在我总能理解发生了什么,但这让我完全不解.当然MyObj,在消息发布之前进行初始化,所以我在这里看不到任何问题.有人可以向我解释一下这里发生了什么吗?