簡體   English   中英

javascript使用自定義事件創建自定義類

[英]javascript create custom class with custom events

假設我有javascript類。

function myClass(){

    function someProcess(){
        listeners.init();
    }

    var listeners = {
        init: function(){},
        message: function(){}
    }

    return {
        on: function( prop ) {
            if ( listeners.hasOwnProperty( prop ) ) {
                return listeners[ prop ];
            }
        }
    }

}

然后有人像這樣創建對象並使用我的自定義事件

var c = new myClass();
c.on('init', function(){
    console.log('init executed');
});

現在我想從我的someProcess()方法(在myClass中)執行初始化。 因此,想法是注冊自定義事件,然后從我的班級內部觸發它們。

我發現了怎么做

function MyClass(){

    //@private
    var isFunction = function(functionToCheck){
        var getType = {};
        return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
    }



    //@private
    var listeners = {
        init: [],
        message: []
    }





    return {
        on: function( evName, callback ) {
            if ( listeners.hasOwnProperty( evName ) && isFunction(callback) ) {
                listeners[evName].push(callback);
            }
        },
        fireEvent: function(evName){
            if ( listeners.hasOwnProperty( evName )) {
                for(var i in listeners[evName]){
                    listeners[evName][i]();
                }
            }
        }
    }



}



var a = new MyClass();
a.on('init', function(a){
    console.log('a_1 inited')
})

a.on('init', function(){
    console.log('a_2 inited')
})



var b = new MyClass();
b.on('init', function(){
    console.log('b_1 inited')
})

a.fireEvent('init');
b.fireEvent('init');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM