gpt4 book ai didi

javascript - Node.js 类递归发射

转载 作者:行者123 更新时间:2023-11-30 13:16:41 25 4
gpt4 key购买 nike

所以,我正在尝试 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();

运行时输出如下:

代码:开始代码:勾选

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.tickthis.emit('tick');功能。

帮助,因为我真的看不出究竟出了什么问题,毫无疑问一定是范围界定问题? :(

最佳答案

当调用 setTimeout(this.tick, this.interval) 时,tick 方法将在默认上下文中执行,而不是 this 所引用的内容就在那里。您需要...

this 的值绑定(bind)到代码实例:

setTimeout(this.tick.bind(this), this.interval)

或者保存对代码实例的引用:

var self = this;
setTimeout(function() {
self.tick();
}, this.interval);

关于javascript - Node.js 类递归发射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com