//用于接下来的,玩意又对该文件再次添加watchFile时,使用
stat = statWatchers[filename] = new StatWatcher();
//并且,对实例执行start的方法,应该是启动该实例不
stat.start(filename, options.persistent, options.interval);
}
//对该实例,监听change事件,并设置回调函数
stat.addListener('change', listener);
return stat;
};
注:在前面的源码解释中,出现了几个概念,我认为是有必要在这里补充一下的,因为如果对这几个概念的了解不深刻,那么久可能不理解为什么会这么写,或者意识不到,必须这么写才能保证代码正确的执行的。
1:只继承实例内部属性和方法,涉及代码:EventEmitter.call(this);
2:原型链的断链概念,涉及代码:util.inherits(StatWatcher, EventEmitter);
上述两个概念的一些相关内容,请参考:对象继承的方法小结,原型链断链的原因,浅析赋值表达式–JS基础核心之一。
3:nodejs中的event模块,也就是EventEmitter构造函数的相关信息:nodejs核心模块–events。
4:util模块,也就是util.inherits所在的模块,nodejs核心模块–util。
关于watchFile的源码,到这也就结束了,接下来,看unwatchFile的方法,用于解除对某个文件的监听。
fs.unwatchFile方法
该方法是用于解除一个文件的监听事件,其使用方法为
fs.unwatchFile(filename,[listener]); 其中:
1:filename:必须,需要被监听的文件的完整路径以及文件名
3:listener:可选,被监听文件发生改变时调用的回调函数
回调函数传入两个参数callback(curr,prev),它们都是fs.Stats的实例,关于该实例的详细介绍,请参考前篇文章,curr表示修改之后的的信息对象,prev表示本次修改之前的信息对象。
这里不在给出示例了,其实unwatchFile就相当于我们常用的off事件(jQuery),所以,这里也有个相同的问题,那就是,如果您不指定listenter的话,那么会把之前绑定的所有的watchFile的回调函数,都去除掉的,再者,匿名函数,是无法单独解除绑定的,所以请注意。
fs.unwatchFile源码
unwatchFile的实现原理是比较简单的,所以,这里就不过多的说明,细节部分,请查看源码中的注释。
fs.unwatchFile = function(filename, listener) {
//判断filename是否合法,不合法,则抛出异常
nullCheck(filename); // 把filename转换成绝对地址
filename = pathModule.resolve(filename);
// 判断需要解除绑定文件,是否有缓存StatWatchers的实例,
// 如果没有,则表示,没有绑定过监听事件,则不需要去解除绑定
if (!inStatWatchers(filename)) return;









