开发指南中讲到的node核心模块有events,util,fs,http。介于篇幅的原因,在这里我想分两个次总结笔记。
Events是node最重要的模块。Nodejs本身架构就是基于事件的。
àEventEmitter.on(event,listener) //注册一个时间,事件名为event,相应事件的回调函数为listener
à EventEmitter.emit(event,[arg1],[arg2],[…])//args为发射已注册的事件event,并传递若干个args参数
à EventEmitter.once(event,listener)//单词监听事件,时间最多只能触发一次,出发后该注册的event时间会解除监听
à EventEmitter.removeListrner(event,listener)//解除已监听了的事件
à EventEmitter.removeListrner(event,listener)
Node中已经有定义好的事件,比如说error事件。当error被发射时(emit),如果eventEmitter没有响应的监听器,node会把它当作一场,并退出程序打印调用栈
上面代码中定义了两个同名的someEvent事件。Node会根据两个时间的监听器调用相关回调函数。
通常情况下,不会直接使用EventEmitter,而是使用继承他的方式。
文中讲到了util的两个API:util.inherits和util.inspect
util.inherits(constructor,superConstructor).这个是node包装好的用于实现继承的方法。在javascript中的继承和java中的不太一样。开发指南中对它的解释挺有意思:
"基于类的语言中类就像一个模具,对象有这个模具浇注产生,而基于原型的语言中,原想就好像一件艺术品的原件,我们通过以太100%精确的机器把这个原件复制出很多分"
Node包装好的这个继承只能继承父类中在原型中定义的函数:
结果:
可以看到,使用过原型定义的函数shouName能够正常输出。代码段中26行把sayHello()注释掉,因为sub中没有继承到base的sayHello()方法,会抛出异常:
这当然不是这两个API的全部用法,只是适用于初学node掌握node的特性。由于node是异步的方式,在多事件写作的时候会有控制流的问题。以后深入研究后会在这里补上笔记!
在我理解看来,这个方法有点像java里面的toString()
Util.inspect(Object,[shouHidden],[depth],[colors])
Object:既要转换的对象
showHidden:如果设置为true,相识更多隐藏信息
depth:表示最大递归的层数。如果不指定,默认递归两层。指定为null,不限制层数的递归
color:用于显示颜色
下面用一个例子展现
转贴:http://www.cnblogs.com/wenlonghor/p/3309527.html