Node.js类递归发射
Node.js class recursive emission
所以,我正在尝试Hands-On Node.js 中的Ticker,Event Emitter练习
我有这个代码:
var EventEmitter = require('events').EventEmitter,
util = require('util');
// Ticker Constructor
var Ticker = function (interval) {
this.interval = interval;
this.pulse = null;
}
util.inherits(Ticker, EventEmitter);
Ticker.prototype.start = function() {
this.emit('start');
this.tick();
}
Ticker.prototype.stop = function() {
if (this.pulse != null) clearTimeout(this.pulse);
this.emit('stop');
}
Ticker.prototype.tick = function() {
this.emit('tick');
this.pulse = setTimeout(this.tick, this.interval);
}
var ticker = new Ticker(1000);
ticker.on('start', function() { console.log('Ticker: Start'); });
ticker.on('tick', function() { console.log('Ticker: Tick'); });
ticker.on('stop', function() { console.log('Ticker: Stop'); });
ticker.start();
运行时输出以下内容:
Ticker:开始Ticker:Tick
timers.js:103
if (!process.listeners('uncaughtException').length) throw e;
^
TypeError: Object #<Object> has no method 'emit'
at Object.Ticker.tick [as _onTimeout] (/Users/twilson/Projects/tutorials/node/ticker-01.js:23:8)
at Timer.list.ontimeout (timers.js:101:19)
其中,线ticker-01.js:23
是Ticker.prototype.tick
函数的this.emit('tick');
。
帮助,因为我真的看不出到底出了什么问题,毫无疑问,这肯定是一件范围界定的事情?:(
调用setTimeout(this.tick, this.interval)
时,tick
方法将在默认上下文中执行,而不是this
所指的上下文。你需要。。。
将this
的值绑定到ticker实例:
setTimeout(this.tick.bind(this), this.interval)
或者保存对ticker实例的引用:
var self = this;
setTimeout(function() {
self.tick();
}, this.interval);
相关文章:
- 数组在递归方法中设置为null
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 递归使用 eval() 是检查程序执行的好方法吗?
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 递归深度比较
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 递归函数中断
- 如何递归地获取嵌套对象中所有子对象的列表
- JavaScript 素数搜索无限递归
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- 递归|两个函数名
- 有没有一种方法可以在Javascript中进行可变递归currying
- 如何对不同的表递归使用以下代码
- 将jQuery对象传递到setTimeout递归函数中
- 有更好的方法吗?(递归解析HTML unicode实体)
- 为什么递归生成器函数没有't在ES2015工作
- 使用递归实现加性持久性
- 递归显示n元树
- 无递归的异步循环
- Node.js类递归发射