日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Node.js自定义对象事件监听与发射

發(fā)布時(shí)間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node.js自定义对象事件监听与发射 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Node.js是以事件驅(qū)動(dòng)的,那我們自定義的一些js對(duì)象就需要能監(jiān)聽事件以及發(fā)射事件。在Node.js中事件使用一個(gè)EventEmitter對(duì)象發(fā)出,該對(duì)象在events模塊中。它應(yīng)該是使用觀察者設(shè)計(jì)模式來實(shí)現(xiàn)把事件監(jiān)聽器添加到對(duì)象以及移除,之前寫OC那塊的時(shí)候也有些觀察者設(shè)計(jì)模式,在OC中也經(jīng)常用到:通知中心、KVO,也很容易理解.

.addListener(eventName,callback):將回調(diào)函數(shù)附加到對(duì)象的監(jiān)聽器中。當(dāng)eventName的事件被觸發(fā)時(shí),回調(diào)函數(shù)被放置在事件隊(duì)列中執(zhí)行。

.on(eventName,callback):和.addListener一樣。

.once(eventName,callback),也是監(jiān)聽不過只在第一次被觸發(fā)。

.listeners(eventName):返回一個(gè)連接到eventName事件的監(jiān)聽器函數(shù)數(shù)組。

.setMaxListeners(n):如果多于n的監(jiān)聽器加入到EventRmitter對(duì)象,就會(huì)出發(fā)警報(bào).

.removeListener(eventName,callback):將callback函數(shù)從EventEmitter對(duì)象的eventName事件中移除。

二、上面寫了那么多也都是EventEmitter對(duì)象方法的使用,自定義的對(duì)象怎么能使用它們才是關(guān)鍵!

監(jiān)聽方法都是在EventEmitter對(duì)象,要想讓自定義的對(duì)象也能使用這些方法,那就需要繼承EventEmitter。

js中實(shí)現(xiàn)繼承有好幾種方法:構(gòu)造函數(shù)、原型鏈、call、apply等,可以百度一下:js繼承。關(guān)于原型對(duì)象原型鏈這個(gè)寫的挺不錯(cuò):http://www.cnblogs.com/shuiyi/p/5305435.html

只需將Events.EventEmitter.prototype添加到對(duì)象原型中.(在EventEmitter中是通過prototype來添加的監(jiān)聽器方法)

三、使用


var events = require('events'); function Account() {this.balance = 0;//買的資料書上寫要添加下面的語句,我將下面語句注釋掉也能實(shí)現(xiàn)繼承,應(yīng)該是不需要的吧//events.EventEmitter.call(this);this.deposit = function(amount){this.balance += amount;this.emit('balanceChanged');};this.withdraw = function(amount){this.balance -= amount;this.emit('balanceChanged');}; } Account.prototype.__proto__ = events.EventEmitter.prototype; function displayBalance(){console.log("Account balance: $%d", this.balance); } function checkOverdraw(){if (this.balance < 0){console.log("Account overdrawn!!!");} } function checkGoal(acc, goal){if (acc.balance > goal){console.log("Goal Achieved!!!");} } var account = new Account(); account.on("balanceChanged", displayBalance); account.on("balanceChanged", checkOverdraw); account.on("balanceChanged", function(){checkGoal(this, 1000); }); account.deposit(220); account.deposit(320); account.deposit(600); account.withdraw(1200);

Account balance: $220 Account balance: $540 Account balance: $1140 Goal Achieved!!! Account balance: $-60 Account overdrawn!!!Process finished with exit code 0

總結(jié)

以上是生活随笔為你收集整理的Node.js自定义对象事件监听与发射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。