如何从匿名函数访问对象实例

时间:2016-01-14 14:13:17

标签: javascript node.js

我正在处理以下情况。

我必须使用类中的方法,但我也要调用回调... 看一下代码,我创建了_this var因为我不知道如何从匿名函数中访问DeviceAnalyzer实例...

还有其他方法吗?我觉得我这样做的方式有点讨厌哈哈

DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
    var _this = this;
    netutils.ping(host.ipAddress, function(isAlive) {
        deviceInfo.isAlive = isAlive
        _this.emit('device', deviceInfo);
        callback(null, deviceInfo);
    });
};

3 个答案:

答案 0 :(得分:3)

使用ES6和匿名函数,您不必设置或绑定它。

DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback)    {
  netutils.ping(host.ipAddress, (isAlive) => {
      deviceInfo.isAlive = isAlive
      this.emit('device', deviceInfo);
      callback(null, deviceInfo);
  });
};

答案 1 :(得分:1)

IIFE

DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
    (function (that) {
      return netutils.ping(host.ipAddress, function(isAlive) {
        deviceInfo.isAlive = isAlive
        that.emit('device', deviceInfo);
        callback(null, deviceInfo);
    }))(this);
};

答案 2 :(得分:1)

上述方法很好。

另一种方法是使用bind

DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
    netutils.ping(host.ipAddress, function(isAlive) {
        deviceInfo.isAlive = isAlive
        this.emit('device', deviceInfo);
        callback(null, deviceInfo);
    }.bind(this));
};