我有以下代码:
someClass1 = function () {
this.doStuff = function () {
PubSub.publish('topic1', { id: 1 });
}
}
someClass2 = function () {
this.forename = 'bob2';
PubSub.subscribe("topic1", function (msg, data) {
log(msg, data, this.forename);
});
}
function log() {
console.log(arguments);
}
var c1 = new someClass1();
var c2 = new someClass2();
c1.doStuff();
我正在使用 pubsubjs 库 ( https://github.com/federico-lox/pubsub.js )
代码很简单 - 发布消息并使用 PubSub 在另一个类(someClass2)中处理它
我的问题是,当我发布消息并在 someClass2 中处理它时,this 是未定义的。这发生在以下行:log(msg, data, this.forename);
这意味着我无法访问任何 someClass2 属性/函数。我需要做什么才能使 this 不被定义?这可能吗?还有其他有帮助的图书馆吗?我是不是做错了......
大家帮忙学徒!谢谢
最佳答案
您正在将未绑定(bind)的函数传递给 subscribe
。这样的函数对this
“一无所知”。您必须绑定(bind)它:
PubSub.subscribe("topic1", (function (msg, data) {
log(msg, data, this.forename);
}).bind(this));
关于javascript - 订阅消息时 PubsubJs 和 *this* 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39527224/