如何从匿名函数访问对象实例
我正在处理以下情况。
我必须使用类中的方法,但我也必须调用callback…查看代码,我已经创build了_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); }); };
使用ES6和匿名函数,您不必设置或绑定它。
DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) { netutils.ping(host.ipAddress, (isAlive) => { deviceInfo.isAlive = isAlive this.emit('device', deviceInfo); callback(null, deviceInfo); }); };
与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); };
上面的方法很好。
另一种方法是使用绑定
DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) { netutils.ping(host.ipAddress, function(isAlive) { deviceInfo.isAlive = isAlive this.emit('device', deviceInfo); callback(null, deviceInfo); }.bind(this)); };