1. 程式人生 > >node.js util全域性變數 事件驅動events

node.js util全域性變數 事件驅動events

一、util全域性變數         1.util.inherits(constructor,superConstructor)             此方法是一個實現物件間原型繼承的函式。javaScript通過原型賦值來實現繼承,細節可參考雲哥JS高階視訊(原型)。              案例看  util/inherits.js             定義了一個基礎物件Base,原型方法為showName,使用Sub物件繼承與Base,可訪問showName方法。             案例:inherits.js         2.util.inspect(object,[showHidden],[depth],[colors])            此方法是一個將任意物件轉換為字串的方法,通常用於除錯和錯誤輸出,它至少接受一個引數object。             引數:object,即要轉換的物件.                         showHidden 是一個可選引數,如果值為true,將會輸出更多隱藏資訊.                         depth   標識最大的遞迴的層數,如果物件很複雜,你可以指定層數以控制輸出資訊的多少。預設為2層,指定為null打印出來全部                         如果color為true,輸出格式將會以ANSI顏色編碼,通常用於在終端顯示更漂亮的效果。             案例:inspect.js 二、事件驅動events            events是Node.js最重要的模版,原因是Node.js本身架構就是事件式的,而它提供了唯一的介面。所以開成Node.js事件程式設計的基石。events模組不僅用於使用者程式碼與Node.js下層事件迴圈的互動。還幾乎被所有的模組依賴。             1.事件發射器                 events模組只提供了一個物件。events.EventEmitter。EventEmitter的核心就是事件發射與事件監聽器功能的封裝。EventEmitter的每個事件由一個事件或若干個引數組成,事件名是一個字串,通常表達一定的語義。對於每個事件,EventEmitter支援若干個事件監聽器。當事件發射時,註冊到這個事件的事件監聽器被依次呼叫,事件引數作為回撥函式引數傳遞。            案例:events.js             常用API的方法介紹:                (1)EventEmitter.on(event,listener)為指定事件註冊一個監聽器,接受一個字串event和一個回撥函式listener                (2)EventEmitter.emit(event,[arg1],[arg2]....) 發射event事件,傳遞若干可選引數到事件監聽器的引數表                (3)EventEmitter.once(event,listener) 為指定事件註冊一個單次監聽器,即監聽器最多隻會觸發一次,觸發後立刻解除該監聽器。                (4)EventEmitter.removeListener(event,listener)移除指定事件的某個監聽器,listener必須是該事件已經註冊過的監聽器。                (5)EventEmitter.removeAllListeners([event]) 移除所有事件的所有監聽器,如果指定event,則移除指定事件的所有監聽器。             2.error事件                EventEmitter定義了一個特殊的事件error,它包含錯誤的定義,我們在遇到異常的時候通常會發射error事件,當error事件被髮射時,EventEmitter規定如果沒有相應的監聽器,Node.js會把它當作異常,退出程式並列印呼叫棧,我們一般要為發射error的事件物件設定監聽器,避免遇到錯誤後整合程式崩潰,例如:              3.繼承EventEmitter                 大多數時候我們不會直接使用EventEmitter,而是在物件中繼承它,包括fs,net,http   在內的。只要是支援事件相應的核心模組都是EventEmitter的子類。                 為什麼這樣做呢?                      1.具有某個實體功能的物件實現事件的符合語義,事件的監聽和發射應該是一個物件的發放。                       2.javaScript的物件機制基於原型,支援部分多重繼承,繼承EventEmitter不會打亂物件原有的繼承關係
var util=require('util');
function Base(){
	this.name='base';
	this.base=2012;
	this.sayHello=function(){
		console.log('hello '+this.name+' this year is '+this.base);
	};
}
Base.prototype.showName=function(){
	console.log(this.name);
}
function Sub(){
	this.name='sub';
}
util.inherits(Sub,Base);
var objBase=new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub=new Sub();
objSub.showName();
//objSub.sayHello();//error
console.log(objSub);

var util=require('util');
function Person(){
	this.name='marico';
	this.toString=function(){
		return this.name;
	}
}
var obj=new Person();
console.log(util.inspect(obj));
console.log(util.inspect(obj,true,2,true));

var events=require('events');

var emitter=new events.EventEmitter();

emitter.on('someEvent',function (args1,args2){
	console.log('Listener1',args1,args2);
});
emitter.on('someEvent',function(arg1,arg2){
	console.log('Listener2',arg1,arg2);
});
emitter.emit('someEvent','hello',999);