欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js自定義對(duì)象事件的監(jiān)聽與發(fā)射

 更新時(shí)間:2022年07月05日 15:30:14   作者:社會(huì)主義接班人  
這篇文章介紹了Node.js自定義對(duì)象事件監(jiān)聽與發(fā)射的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、Node.js是以事件驅(qū)動(dòng)的,那我們自定義的一些js對(duì)象就需要能監(jiān)聽事件以及發(fā)射事件。

在Node.js中事件使用一個(gè)EventEmitter對(duì)象發(fā)出,該對(duì)象在events模塊中。它應(yīng)該是使用觀察者設(shè)計(jì)模式來(lái)實(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)聽不過(guò)只在第一次被觸發(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ò):三張圖帶你搞懂JavaScript的原型對(duì)象與原型鏈

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

三、使用

var events = require('events');
function Account() {
    this.balance = 0;
    //買的資料書上寫要添加下面的語(yǔ)句,我將下面語(yǔ)句注釋掉也能實(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);

輸出結(jié)果:

Account balance: $220
Account balance: $540
Account balance: $1140
Goal Achieved!!!
Account balance: $-60
Account overdrawn!!!

Process finished with exit code 0

到此這篇關(guān)于Node.js自定義對(duì)象事件的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解阿里Node.js技術(shù)文檔之process模塊學(xué)習(xí)指南

    詳解阿里Node.js技術(shù)文檔之process模塊學(xué)習(xí)指南

    這篇文章主要介紹了詳解阿里Node.js技術(shù)文檔之process模塊學(xué)習(xí)指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Windows 系統(tǒng)下安裝和部署Egret的開發(fā)環(huán)境

    Windows 系統(tǒng)下安裝和部署Egret的開發(fā)環(huán)境

    Egret基于TypeScript開發(fā)的,而TypeScript編譯工具tsc是基于Node.js 開發(fā)的。所以在安裝過(guò)程中,我們先需要對(duì)于基礎(chǔ)支持工具進(jìn)行安裝。
    2014-07-07
  • 淺探express路由和中間件的實(shí)現(xiàn)

    淺探express路由和中間件的實(shí)現(xiàn)

    這篇文章主要介紹了淺探express路由和中間件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 淺析node.js中close事件

    淺析node.js中close事件

    本文簡(jiǎn)單介紹了http.ServerRespose對(duì)象的close事件,并給出了相關(guān)實(shí)例,推薦給需要的小伙伴參考下吧。
    2014-11-11
  • nodejs入門教程三:調(diào)用內(nèi)部和外部方法示例

    nodejs入門教程三:調(diào)用內(nèi)部和外部方法示例

    這篇文章主要介紹了nodejs入門教程之調(diào)用內(nèi)部和外部方法,結(jié)合實(shí)例形式分析了nodejs內(nèi)部與外部方法的定義與調(diào)用相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • 手把手教你使用TypeScript開發(fā)Node.js應(yīng)用

    手把手教你使用TypeScript開發(fā)Node.js應(yīng)用

    為了減少代碼編寫過(guò)程中出現(xiàn)的錯(cuò)誤,以及更好的維護(hù)你的項(xiàng)目,本文將手把手教你配置一個(gè)簡(jiǎn)單的開發(fā)環(huán)境來(lái)編寫Node.js的應(yīng)用程序,感興趣的小伙伴們可以參考一下
    2019-05-05
  • centos 上快速搭建ghost博客方法分享

    centos 上快速搭建ghost博客方法分享

    本文給大家分享的是如何在centos上快速搭建基于Node.js 構(gòu)建的開源博客平臺(tái)ghost的方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2018-05-05
  • Node文件操作匯總實(shí)例詳解

    Node文件操作匯總實(shí)例詳解

    這篇文章主要為大家介紹了Node文件操作匯總實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 使用Nodejs?實(shí)現(xiàn)一個(gè)簡(jiǎn)單的?Redis客戶端(推薦)

    使用Nodejs?實(shí)現(xiàn)一個(gè)簡(jiǎn)單的?Redis客戶端(推薦)

    在nodejs中支持TCP連接的是net模塊,?其中使用createConnection(config)或者直接new?Socket(config)來(lái)初始化一個(gè)TCP連接,這篇文章主要介紹了用Nodejs?實(shí)現(xiàn)一個(gè)簡(jiǎn)單的?Redis客戶端,需要的朋友可以參考下
    2022-11-11
  • Node工程的依賴包管理方式

    Node工程的依賴包管理方式

    在前端工程化中,JavaScript 依賴包管理是非常重要的一環(huán)。依賴包通常是項(xiàng)目所依賴的第三方庫(kù)、工具和框架等資源,它們能夠幫助我們減少重復(fù)開發(fā)、提高效率并且確保項(xiàng)目可以正確的運(yùn)行。本文詳細(xì)介紹了Node工程的依賴包管理方式,感興趣的同學(xué)可以參考一下
    2023-04-04

最新評(píng)論