详解详解Nodejs的的timers模块模块
本模块,属于来模拟一些浏览器自带方法的模块,比如setTimeout,clearTimeout等方法,之所以会有该模块,在我看来,也
是为了能让前端工程师使用起来,更简单,使用一个单独的模块,来把浏览器上的功能来模拟出来,那么就可以直接减少学习
的成本,这样就可以花更少的时间,学习到更多的东西。
timers模块中,使用的模块中,使用的C++的方法的方法
timers模块中,调用了C++实现的方法,这些方法,在该模块中,占据了很重要的位置,所以,这里我们先来看下,在C++的
方法中,提供了哪些方法。
var Timer = process.binding('timer_wrap').Timer;
console.log(Timer);
运行之后,在控制台,就会打印出如下的内容,它的格式如下
{
[Function: Timer] // Timer构造函数,可以进行实例化
kOnTimeout: 0,
// 静态属性,公用,更改会影响其他的调用
now: [Function: now] // 静态方法,获取类似时间戳的一个数字
}
其中,Timer本身是一个构造函数,而这个构造函数中,还包含了一个静态属性和一个静态方法,关于静态属性和方法,基本
上,这两个只是拿来使用的,是禁止修改的,并且,其使用方法比较简单,所以这里不多说了。
Timer既然还是一个构造函数,那么久是可以被实例化的,接下来,看下实例化之后的对象:
var Timer = process.binding('timer_wrap').Timer,
timer = new Timer(),
i = "";
console.log("obj has attribute:");
console.log(timer);
console.log("prototype method and attribute:");
for(i in timer){
console.log(i+"="+timer[i]);
}
把上面的代码,执行的结果如下:
obj has attribute:
{}
prototype method and attribute:
close=function close() { [native code] }
ref=function ref() { [native code] }
unref=function unref() { [native code] }
start=function start() { [native code] }
stop=function stop() { [native code] }
setRepeat=function setRepeat() { [native code] }
getRepeat=function getRepeat() { [native code] }
again=function again() { [native code] }
从上面的结果中可以看出,在Timer实例化之后,在对象本身,是没有属性和方法的,在原型链上,是有一些方法,至于这些
方法,有什么用,就需要慢慢去看一下了。
timers模块中的一个基础--构造函数模块中的一个基础--构造函数Timeout
之所以这里要把这个构造函数以单小节的形式给出,是因为在我看来,如果想要对整个timers模块中的逻辑有更好的认识,那
么该模块的基础一个私有的构造函数的理解,还是很有必要的。
这里,我们首先来看一下源码:
var Timeout = function(after) {
// 定义内部属性,过时时间
this._idleTimeout = after;