删除超出作用域的函数中定义的监听器
remove listener defined in function thats out of scope
我有一个模块,必须记录我想添加的功能。我的问题是,因为this.audio.stdout有另一个函数的侦听器设置,我只能删除启动函数调用时激活的侦听器,而不会搞乱其他进程。因为filename的值会根据函数被调用的时间而变化,所以我必须在设置该值的范围内定义回调函数。这适用于使用start()开始录制,但是当我调用stop()时,它会删除侦听器,程序不知道该做什么,因为回调超出了范围。正确的做法是什么?
function Record(rx) {
this.rx = rx;
this.audio = spawn('audio_client');
}
Record.prototype.start = function () {
var self = this;
self.filename= new Date().getTime()+'_'+this.rx
function record(data) {
console.log(self.filename);
}
this.audio.stdout.on('data', record);
}
Record.prototype.stop = function () {
this.audio.stdout.removeListener('data',record);
}
UPDATE:
对不起,我一开始没明白你的意思。我看了一会儿,这是我能想到的最好的。像这样在构造函数中为每个实例创建record方法并不理想,但是,这是我能想到的最好的方法。function Record(rx) {
this.rx = rx;
this.audio = spawn('audio_client');
var self = this;
this.record = function (data) {
console.log(self.filename);
};
}
Record.prototype.start = function () {
this.filename= new Date().getTime()+'_'+this.rx
this.audio.stdout.on('data', this.record);
};
Record.prototype.stop = function () {
this.audio.stdout.removeListener('data', this.record);
};
更新# 2:
更好,因为您特定于节点,将是this.record = this.record.bind(this);
。
相关文章:
- 用嵌套函数和默认函数定义函数
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 控制台返回var不是't定义,但它是
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- jQuery自定义验证比较多个输入的序列
- 查看JS对象的所有键,甚至是getter定义的键
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- 在监听器中使用javascript隐藏自定义多字段的字段
- 事件监听器和自定义事件ExtJS
- 自定义Javascript库:为动态添加的html添加事件监听器
- Javascript自定义事件——触发所有监听器
- 事件监听器不起作用.它说事件没有在控制台中定义
- 自定义对象和事件监听器
- 删除超出作用域的函数中定义的监听器
- 如何将点击监听器添加到聚合物自定义元素'的孩子
- 监听器上的Angular$在回调时返回未定义的数据值