javascript - 订阅消息时 PubsubJs 和 *this* 未定义

标签 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 中处理它时,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/

相关文章:

python - 无法在 rospy 中发布订阅的主题

javascript - 在 Javascript 中从数组中获取名称和值

javascript - 无法访问 Jquery JCrop api

javascript - 从多个按钮获取值(value)

erlang - 在 ejabberd 中以编程方式创建和删除 pubsub 节点

iot - Google IOT - 设备订阅/devices/XXXX/config 以外的内容

javascript - 相对于其直接父元素放置绝对定位元素

javascript - 如何使用jquery从多重选择中获取正确的值?

java - 需要使用Java RMI创建发布者-订阅者

c# - 启动端点时升级到 NServiceBus 3.2.2 异常