我正在用javascript中的this关键字苦苦挣扎。我已经阅读了很多文章和答案,但是我不明白如何将所有这些知识应用到我的简单代码中。

这是我的“调解人”对象:

function Mediator() {
        this.registered = {}
    }

    Mediator.prototype = {
        constructor: Mediator,

    register: function (id, e) {
        this.registered[id] = e;
        e.m = this; //<-- here
    },

    broadcast: function() {...}
}


但是当我在注册对象中尝试时

this.m.broadcast("Connected");


我得到了很棒的Uncaught TypeError: cannot call method broadcast on undefined

编辑:

我希望e对象在调解器上保留引用,以便稍后可以在e内部使用广播方法。我的问题是e不会保留我在register方法中设置的引用。

编辑2:

似乎返回一个匿名对象而不是使用原型可以完成此工作:

function Mediator() {
    var registered = {}

    return {
        register: function (id, e) {
                      this.registered[id] = e;
                      e.m = this; //<-- here
                  },

        broadcast: function() {...}
    }
}


这样,将m设置为此可以正常工作,以后我可以在其他对象中调用广播。也许这不是纯粹的正确答案,但只要我找不到更好的答案...

最佳答案

尝试this.e= m;this.m = e;不确定要执行的操作。
方法的调用方式如下:broadcast("Connected)您无需指定此方法。或米当您调用它时。希望这个对你有帮助。

09-05 06:28
查看更多