0

我知道问题出在哪里,但不确定解决此问题的最佳选择是什么。我有一个回调,但我无法访问this它。我不想在范围之外有任何变量来引用它。我可以this作为参数传递吗?

    var myModule = Module.create({

           init: function() {
                ws.subscribe('/topic/notifications', this._wsNotifications, headers);
           },

            refresh: function() {
            },

            _wsNotifications: function ( message ) {
                 this.refresh();  //Error: 'this' is undefined because it's a callback
             }
        });
4

3 回答 3

2

解决此问题的一种方法是在源中使用function.bind当您指定回调时

  ws.subscribe('/topic/notifications', this._wsNotifications.bind(this), headers);

或缓存this到一个变量。

 var myModule = Module.create({
       self  : this,
       init: function() {
            ws.subscribe('/topic/notifications', this._wsNotifications, headers);
       },

        refresh: function() {
        },

        _wsNotifications: function ( message ) {
             self.refresh();  //Error: 'this' is undefined because it's a callback
         }
    });
于 2013-09-16T15:56:21.267 回答
2

试试这个。

var myModule = Module.create({

       var self = this;

       init: function() {
            ws.subscribe('/topic/notifications', this._wsNotifications, headers);
       },

        refresh: function() {
        },

        _wsNotifications: function ( message ) {
           self.refresh();  //Error: 'this' is undefined because it's a callback
        }

    });

    return interactions;
});

self注意变量而不是变量的创建和使用this。使用此方法将保留this,即使它通常会更改范围。

于 2013-09-16T15:56:26.330 回答
2

您可以使用 ECMAscript 的绑定函数 Function.prototype.bind

init: function() {
            ws.subscribe('/topic/notifications', this._wsNotifications.bind(this), headers);
       },

现在,thisinside_wsNotifications将引用您绑定到的对象。

于 2013-09-16T15:56:08.083 回答