2016-12-29 2 views
0

Lassen Sie uns sagen, ich habe JavaScript-Klasse.Javascript erstellen benutzerdefinierte Klasse mit benutzerdefinierten Ereignissen

function myClass(){ 

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

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

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

} 

und dann jemand schafft Objekt wie so und verwendet mein benutzerdefiniertes Ereignis

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

jetzt will ich init von meiner someProcess() Methode (die in myClass ist) auszuführen. Also Idee ist, dass benutzerdefinierte Ereignisse registrieren und dann aus meiner Klasse auslösen.

+0

Klingt wie zu tun, was Sie suchen ist https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent – Noino

Antwort

1

fand ich, wie diese

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'); 
Verwandte Themen