2017-09-21 1 views
-1

J'ai une classe auxiliaire et je veux définir une méthode événementielle qui est déclenchée quand une valeur est modifiée.Javascript create event méthode

par exemple simplifier:

class HelperClass { 
    activeIndex = 0; 

    constructor(element) {} 

    ...some computation methods... 
} 

et je dois appliquer l'événement lorsque activeIndex passe de l'extérieur. Quelque chose comme addEventListener. Quand la valeur interne est modifiée, elle peut être écoutée en dehors des classes. Par exemple:

const obj = new HelperClass(element); 
obj.onActiveIndexChange((event, activeIndex) => ...something...) 

or 

obj.on('activeIndexChange', (event, activeIndex) => ....something....) 

Je ne veux pas utiliser des bibliothèques externes. Préférez le code vanilla avec des fonctionnalités natives.

Merci.

MISE À JOUR: SOLUTION SIMPLE

class HelperClass { 
    activeIndex = 0; 

    addEventListener(eventName, func) { 
    this[ 
     `on${eventName.substr(0, 1).toUpperCase()}${eventName.substr(1)}` 
    ] = func; 
    } 

    onActiveIndexChange(activeIndex) {} 
} 

this.onActiveIndexChange (newValue) appelant après avoir changé la valeur

et ensuite à l'extérieur définissant:

objInstance.addEventListener('activeIndexChange', (activeIndex) => 
    ...myCustomCodePassed in callback... 
); 

Répondre

0

Vous pouvez définir un setter pour une propriété d'objet :

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/defineProperty

Il déclencherait une fonction chaque fois que vous modifiez la valeur.

C'est JavaScript JavaScript.

+0

DefineProperty est très bien quand je veux appeler la méthode de self classe, la fonctionnalité même comme poseur ES6 droite? . Mais je veux créer un événement de méthode accessible de l'extérieur. – rado

+0

Alors ce ne serait pas une méthode! – lilezek

+0

Je crée une solution rapide. Pas le meilleur, mais ça marche. J'ai fait la méthode wchith prend une autre fonction et cette fonction que je peux appeler de l'extérieur. Quelque chose comme ceci: onValueChange (func) {this.callbackMethod = func} – rado