node中的this学习体会(有代码示例)

做一个定时器功能,用node的对象和事件机制。
每隔500毫秒输出一个点,输出3次。

全部代码如下,使用事件机制。

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

function Pulsar(speed, times) {
events.EventEmitter.call(this);
this.speed=speed;
this.times=times;
// 设置监听器
this.on('pulse',()=>{
console.log('.');
});
}
// 继承
util.inherits( Pulsar, events.EventEmitter );
// 写一个start方法
Pulsar.prototype.start=function() {
var self = this;
var id=setInterval( function() {
self.emit('pulse');
self.times--;
if (self.times==0) {
clearInterval(id);
}
}, this.speed);
};

// 执行。
var pulsar= new Pulsar(500,3);
pulsar.start();

该程序执行结果如下:[b]
.
.
.
[/b]
然后就结束了。

仔细观察,发现代码中的定时器部分的this引用有点丑陋,于是有两种解决方案,
1、使用bind绑定this,bind是所有函数的一个自带的内部方法。
被改动的代码如下:

// 写一个start方法
Pulsar.prototype.start=function() {
var id=setInterval( function() {
this.emit('pulse');
this.times--;
if (this.times==0) {
clearInterval(id);
}
}.bind(this), this.speed);
};


把匿名函数用括号括起(不用括号也可以),然后加bind方法绑定自身,感觉应该还不错,可以执行,但是还有更好的方案。

2、使用箭头函数。

// 写一个start方法
Pulsar.prototype.start=function() {
var id=setInterval( ()=> {
this.emit('pulse');
this.times--;
if (this.times==0) {
clearInterval(id);
}
}, this.speed);
};


node果然趣味无穷,花样比较多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值