编程语言
首页 > 编程语言> > javascript – 自定义事件(观察者模式)

javascript – 自定义事件(观察者模式)

作者:互联网

我找不到如何实现这个(我为自由式记录道歉):

//assign the event handler for the object "myObj"     
myObj.onMyEvent = //do something

//if something happened somewhere, then run the event
MyEvent.fire();

我们的想法是调用(生成)一些自定义事件(MyEvent).我们有一个对象“myObj”能够识别“MyEvent”的出现,并以某种方式(以他自己的方式)来响应它.
另外,我们有其他对象(不同的排序),(以他们自己的方式)对“MyEvent”作出反应.

我知道有“观察者模式”,但我找不到具体的实现.

你能告诉我在哪里读一下吗?
或者在自然界中一般不可能?
或者完全不同?

更新1:没有JS库,请(jQuery,Prototype,YUI,…)

解决方法:

no JS libs, please (jQuery, Prototype, YUI, …)

我会认真地重新考虑这个要求.所有这些库已经多次解决了这个或类似的问题.

但如果你想从头开始,做这样的事情:

window.customEvents = {
    handlers : {
        foo:[],
        bar:[],
        baz:[]
    },

    registerEventHandler:function(event, object, handler){
       if(typeof(customEvents.handlers[event])=="undefined")
           customEvents.handlers[event]=[]; 
       customEvents.handlers[event].push([object, handler]);
    },

    fireEvent:function(eventName, data){
        if(customEvents.handlers[event]){
            for(var i = 0; i < customEvents.handlers[event].length; i++){
                var handlerPair = customEvents.handlers[event][i];
                handlerPair[1](handlerPair[0], data);
            }
        }
    },

}

用法:

// register event handler
customEvents.registerEventHandler(eventName, targetObject, handlerFunction)

// fire event
customEvents.fireEvent(eventName, data)

// handlerFunction will be passed two parameters: targetObject and event data

标签:javascript,observer-pattern,custom-event
来源: https://codeday.me/bug/20190715/1463112.html