我有以下代码:
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中处理它时,这个是未定义的。这发生在以下行:log(msg,data,this.forename);
这意味着我无法访问任何someClass2属性/函数。我需要做些什么才能使 this 不被定义?这可能吗?他们是其他图书馆会有所帮助吗?我做错了吗....
所有帮助学徒!谢谢
答案 0 :(得分:1)
您将未绑定的功能传递给subscribe
。这样的功能对this
“不知道”。你必须绑定它:
PubSub.subscribe("topic1", (function (msg, data) {
log(msg, data, this.forename);
}).bind(this));
答案 1 :(得分:0)
this
不是您在回调中所期望的,只是将this
的副本缓存为外部的另一个变量:
someClass2 = function () {
this.forename = 'bob2';
var that = this;
PubSub.subscribe("topic1", function (msg, data) {
log(msg, data, that.forename);
});
}