订阅邮件

时间:2016-09-16 08:46:03

标签: javascript publish-subscribe

我有以下代码:

    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 不被定义?这可能吗?他们是其他图书馆会有所帮助吗?我做错了吗....

所有帮助学徒!谢谢

2 个答案:

答案 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);
    });
}