91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js如何自定義對象事件的監聽與發射

發布時間:2022-07-06 10:29:31 來源:億速云 閱讀:140 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Node.js如何自定義對象事件的監聽與發射”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Node.js如何自定義對象事件的監聽與發射”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、Node.js是以事件驅動的,那我們自定義的一些js對象就需要能監聽事件以及發射事件。

在Node.js中事件使用一個EventEmitter對象發出,該對象在events模塊中。它應該是使用觀察者設計模式來實現把事件監聽器添加到對象以及移除,之前寫OC那塊的時候也有些觀察者設計模式,在OC中也經常用到:通知中心、KVO,也很容易理解.

  • .addListener(eventName,callback):將回調函數附加到對象的監聽器中。當eventName的事件被觸發時,回調函數被放置在事件隊列中執行。

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

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

  • .listeners(eventName):返回一個連接到eventName事件的監聽器函數數組。

  • .setMaxListeners(n):如果多于n的監聽器加入到EventRmitter對象,就會出發警報.

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

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

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

js中實現繼承有好幾種方法:構造函數、原型鏈、call、apply等,可以百度一下:js繼承。關于原型對象原型鏈這個寫的挺不錯:三張圖帶你搞懂JavaScript的原型對象與原型鏈

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

三、使用

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

讀到這里,這篇“Node.js如何自定義對象事件的監聽與發射”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天气| 定结县| 新野县| 乌拉特前旗| 庆元县| 垦利县| 芮城县| 乐至县| 上饶市| 台中市| 岳普湖县| 沾益县| 宁城县| 达州市| 侯马市| 襄樊市| 乌恰县| 铁岭县| 漠河县| 响水县| 保康县| 长泰县| 尉氏县| 连城县| 贵溪市| 涿州市| 阳朔县| 邵武市| 临汾市| 思茅市| 郯城县| 遵化市| 亚东县| 诸城市| 平陆县| 元谋县| 常山县| 水富县| 托克托县| 玉林市| 峨眉山市|