2017-09-21 46 views
-1

我有助手类,并希望定义事件方法,当某些值更改时触发。Javascript创建事件方法

如简化:

class HelperClass { 
    activeIndex = 0; 

    constructor(element) {} 

    ...some computation methods... 
} 

,我需要的时候activeIndex从外面改为火灾事件。像addEventListener一样。内部价值何时发生变化,可以从外部收听。 例如:

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

or 

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

我不想使用外部库。喜欢具有原生特征的香草代码。

谢谢。

UPDATE:SIMPLE SOLUTION

class HelperClass { 
    activeIndex = 0; 

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

    onActiveIndexChange(activeIndex) {} 
} 

this.onActiveIndexChange(newValue)以变更值

然后外面限定后调用:

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

回答

0

可以定义一个setter为对象属性:

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

每次更改值时都会触发一个函数。

这是香草JavaScript。

+0

defineProperty是罚款时,我想打电话从自我类的方法,同样的功能,例如ES6二传手吧? 。但我想创建可从外部访问的方法事件。 – rado

+0

然后它不会是一个方法! – lilezek

+0

我创建了快速解决方案。不是最好的,但工程。我做了方法wchith采取另一个功能,我可以从外部打电话的功能。类似这样的:onValueChange(func){this.callbackMethod = func} – rado