gpt4 book ai didi

node.js - this.emit 不工作但 self.emit 工作。为什么?

转载 作者:搜寻专家 更新时间:2023-11-01 00:26:05 31 4
gpt4 key购买 nike

以下 node.js 脚本不工作

var EventEmitter = require('events').EventEmitter;
var util = require('util');

var TickE = function() {
}

util.inherits(TickE, EventEmitter); //TickE.prototype.__proto__ = EventEmitter.prototype;

TickE.prototype.ticker = function() {
var self = this;
setInterval (function () {
self.emit('tick');
}, 1000);
};

var t = new TickE ();

//console.log (util.inspect(t));

t.on('tick', function() { console.log ('Tick...');});

t.ticker();

如果我像下面这样调用 emit 方法是行不通的

TickE.prototype.ticker = function() {
//var self = this; // commented this line
setInterval (function () {
this.emit('tick'); // using this in place of self
}, 1000);
};

self 只是一个持有 this 引用的变量,为什么会抛出错误?

最佳答案

因为 the this keywordsetInterval 调用的函数中具有不同的值.

您已经知道在闭包中使用 self 变量的解决方案,一个不同的(更短的)解决方案是 binding发出方法:

setInterval(this.emit.bind(this, "tick"), 1000);

关于node.js - this.emit 不工作但 self.emit 工作。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16359559/

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