node.js util全域性變數和事件驅動events
一、util全域性變數
1.util.inherits(constructor,superConstructor) 此方法是一個實現物件間原型繼承的函式。javaScript通過原型賦值來實現繼承,細節可參考雲哥JS高階視訊(原型)。 案例看 util/inherits.js 定義了一個基礎物件Base,原型方法為showName,使用Sub物件繼承與Base,可訪問showName方法。 案例:inherits.jsvar 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(); console.log(objSub);
2.util.inspect(object,[showHidden],[depth],[colors]) 此方法是一個將任意物件轉換為字串的方法,通常用於除錯和錯誤輸出,它至少接受一個引數object。 引數:object,即要轉換的物件. showHidden 是一個可選引數,如果值為true,將會輸出更多隱藏資訊. depth 標識最大的遞迴的層數,如果物件很複雜,你可以指定層數以控制輸出資訊的多少。預設為2層,指定為null打印出來全部 如果color為true,輸出格式將會以ANSI顏色編碼,通常用於在終端顯示更漂亮的效果。 案例:inspect.js
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));
二、事件驅動events
events是Node.js最重要的模版,原因是Node.js本身架構就是事件式的,而它提供了唯一的介面。所以開成Node.js事件程式設計的基石。events模組不僅用於使用者程式碼與Node.js下層事件迴圈的互動。還幾乎被所有的模組依賴。 1.事件發射器 events模組只提供了一個物件。events.EventEmitter。EventEmitter的核心就是事件發射與事件監聽器功能的封裝。EventEmitter的每個事件由一個事件或若干個引數組成,事件名是一個字串,通常表達一定的語義。對於每個事件,EventEmitter支援若干個事件監聽器。當事件發射時,註冊到這個事件的事件監聽器被依次呼叫,事件引數作為回撥函式引數傳遞。 案例:events.jsvar events=require('events');//獲取nodejs模組 var emitter=new events.EventEmitter();//例項化事件發射器 emitter.on('someEvent',function(arg1,arg2){//為指定事件註冊一個監聽器,接受一個字串someEvent和一個回撥函式 console.log('Listener1',arg1,arg2); }); emitter.on('someEvent',function(arg1,arg2){ console.log('Listener2',arg1,arg2); }); emitter.emit('someEvent','marico',1991);//發射someEvent事件,傳遞引數到事件監聽器的引數表
常用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的事件物件設定監聽器,避免遇到錯誤後整合程式崩潰,例如:
var events=require('events');
var emitter=new events.EventEmitter();
emitter.emit('error');
3.繼承EventEmitter 大多數時候我們不會直接使用EventEmitter,而是在物件中繼承它,包括fs,net,http 在內的。只要是支援事件相應的核心模組都是EventEmitter的子類。 為什麼這樣做呢? 1.具有某個實體功能的物件實現事件的符合語義,事件的監聽和發射應該是一個物件的發放。 2.javaScript的物件機制基於原型,支援部分多重繼承,繼承EventEmitter不會打亂物件原有的繼承關係
相關推薦
node.js util全域性變數和事件驅動events
一、util全域性變數 1.util.inherits(constructor,superConstructor) 此方法是一個實現物件間原型繼承的函式。javaScript通過原型賦值來實現繼承,細節可參考雲哥JS高階視訊(原型)。
node.js util全域性變數 事件驅動events
一、util全域性變數 1.util.inherits(constructor,superConstructor) 此方法是一個實現物件間原型繼承的函式。javaScript通過原型賦值來實現繼承,細節可參考雲哥JS高階視訊(原型)。
Node js的全域性物件和全域性變數
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
node.js 設定全域性快取和下載路徑
一、修改配置 方式1、 在nodejs的安裝目錄中找到node_modules\npm\.npmrc檔案 修改如下即可: prefix = D:\AppData\NodeJs\node_global_modules cache = D:\AppData\NodeJs\node_c
JS中全域性變數和區域性變數
全域性變數,作用域為所屬的整個程式。 定義形式: 在函式外定義。 在函式內定義,但是不加 var 宣告。 使用 window.變數名 的形式定義。(注:相容性未知) 使用 window['變數名'] 的形式定義。(注:
js的全域性變數和區域性變數
全域性變數:在script標籤裡面定義一個變數,這個變數在頁面中的js都可以使用。 可以在方法外部使用,可以在方法內部使用,可以在另一個script中使用。區域性變數:
JS 變數和函式提升 全域性變數和區域性變數
1. var a = 10; function test() { a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test();//100 10 100 =&
js全域性變數和區域性變數以及變數宣告提升
區域性變數和全域性變數重名時: 一、Javascript的變數的scope是根據方法塊來劃分的(也就是說以function的一對大括號{ }來劃分)。切記,是function塊,而for、while、if塊並不是作用域的劃分標準。 二、 當全域性變數跟區域性變數重名時,區域性變數的scope
JS中最經典的全域性變數和區域性變數問題(1、作用域和作用域鏈 2、變數宣告提前)
var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test(); 1、程式的執行結果為:100
Node中的全域性物件和全域性變數
這個文章主要是對上一個文章的擴充 util物件 在Node環境已經安裝好的前提下,使用util中已經定義的方法,只需要require('util')即可; uti是utility(功效,用途)的縮寫。這util模組的設計主要是為了滿足Node內部API的需
Node.js Net 模組的所有事件和方法&&net.Socket
Node.js Net 模組 Node.js Net 模組提供了一些用於底層的網路通訊的小工具,包含了建立伺服器/客戶端的方法,我們可以通過以下方式引入該模組: var net = require("net")方法 net.createServer([options]
對js中區域性變數、全域性變數和閉包的理解
對js中區域性變數、全域性變數和閉包的理解 區域性變數 對於區域性變數,js給出的定義是這樣的:在 JavaScript函式內部宣告的變數(使用 var)是區域性變數,所以只能在函式內部訪問它。(該變數的作用域是區域性的)。可以在不同的函式中使用名稱相同的區域性變數,因為只有宣告過該變數的函式才能識別出該變數
node.js環境在Window和Mac中配置,已經安裝cnpm和配置Less環境
use usr 版本 htm args gin targe mpi ffffff Node.js 和cnpm安裝 最近準備學習vue.js,但首先需要配置電腦的環境。配置node.js。 1.在node(https://nodejs.org/en/)官網上下載安裝node.
Python3 全域性變數和區域性變數的使用
name='lhf' def change_name(): print('我的名字',name) change_name() def change_name(): name='帥了一筆' print('我的名字',name) change_name() print(name) d
C++靜態全域性變數和全域性變數的區別
靜態全域性變數 非靜態全域性變數 儲存方式 靜態儲存 靜態儲存 作用域 定義該變數的原始檔內 所有原始檔 解釋: 共同點:
Python千萬要注意的全域性變數和區域性變數問題
1、直接在函式中呼叫全域性變數 m = 100 def fun(): print("m1:",m) fun() print("m2:", m) 輸出: 2、函式體內呼叫與全域性變數同名的區域性變數 m = 100 def fun(): m = 50
python--全域性變數和區域性變數
區域性變數: 是在函式內部定義的變數,只能在函式內部使用 函式執行結束後,函式的區域性變數,會被系統回收 作用:在函式內部使用,臨時儲存函式內部需要使用的資料 全域性變數: 是在函式外部定義的變數(沒有定義某一個函式內,所有函式都
關於python的全域性變數和區域性變數
全域性變數: 定義在函式外部,作用域是整個程式碼段,儲存在記憶體中。 區域性變數: 定義在函式內部,作用域僅在函式內部,儲存在棧中,當函式完成功能,區域性變數會自動丟失。 如果在函式內試圖是修改全域性變數,python會自動建立一個區域性變數替代,名字和全域性變數相同。 下面摘抄小甲魚老
Node.js學習隨筆三,事件event
Node.js 是單程序單執行緒應用程式,但是因為 V8 引擎提供的非同步執行回撥介面,通過這些介面可以處理大量的併發,所以效能非常高。 Node.js 幾乎每一個 API 都是支援回撥函式的。 Node.js 基本上所有的事件機制都是用設計模式中觀察者模式實現。 Node.js 單執行緒類似進入一個w
vue中如何定義全域性變數 和全域性函式
定義全域性變數 原理: 設定一個專用的的全域性變數模組檔案,模組裡面定義一些變數初始狀態,用export default 暴露出去,在main.js裡面使用Vue.prototype掛載到vue例項上面或者在其它地方需要使用時,引入該模組便可。 全域性變數模組檔案: Global.v