首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >this.emit不工作,但self.emit工作。为什么?

this.emit不工作,但self.emit工作。为什么?
EN

Stack Overflow用户
提问于 2013-05-03 21:03:01
回答 1查看 8.3K关注 0票数 2

以下node.js脚本不起作用

代码语言:javascript
复制
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方法,它就不能工作

代码语言:javascript
复制
TickE.prototype.ticker = function() {
    //var self = this; // commented this line
    setInterval (function () {
         this.emit('tick'); // using this in place of self
    }, 1000);
};

self只是一个保存引用的变量,为什么这会抛出错误?

EN

回答 1

Stack Overflow用户

发布于 2013-05-03 21:05:40

因为在setInterval调用的函数中,the this keyword具有不同的值。

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

代码语言:javascript
复制
setInterval(this.emit.bind(this, "tick"), 1000);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16359559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档