JavaScript中的自定义事件,如onReadyEvent()

JavaScript中的自定义事件,如onReadyEvent(),javascript,events,hangout,Javascript,Events,Hangout,我需要与它自己的事件类似的功能,比如Hangout API(可能还有许多其他API) 例如,是否存在一个事件:onapReady,在初始化API时调用该事件 我发现了一个很棒的教程->但不知道如何让你创建和回忆旋转每个对象的事件 注意。Javascript解决方案 在脚本文件之前,必须粘贴以下代码: function EventTarget(){ this._listeners = {}; } EventTarget.prototype = { constructor: Ev

我需要与它自己的事件类似的功能,比如Hangout API(可能还有许多其他API)

例如,是否存在一个事件:onapReady,在初始化API时调用该事件

我发现了一个很棒的教程->但不知道如何让你创建和回忆旋转每个对象的事件

注意。

Javascript解决方案 在脚本文件之前,必须粘贴以下代码:

function EventTarget(){
    this._listeners = {};
}

EventTarget.prototype = {

    constructor: EventTarget,

    addListener: function(type, listener){
        if (typeof this._listeners[type] == "undefined"){
            this._listeners[type] = [];
        }

        this._listeners[type].push(listener);
    },

    fire: function(event){
        if (typeof event == "string"){
            event = { type: event };
        }
        if (!event.target){
            event.target = this;
        }

        if (!event.type){  //falsy
            throw new Error("Event object missing 'type' property.");
        }

        if (this._listeners[event.type] instanceof Array){
            var listeners = this._listeners[event.type];
            for (var i=0, len=listeners.length; i < len; i++){
                listeners[i].call(this, event);
            }
        }
    },

    removeListener: function(type, listener){
        if (this._listeners[type] instanceof Array){
            var listeners = this._listeners[type];
            for (var i=0, len=listeners.length; i < len; i++){
                if (listeners[i] === listener){
                    listeners.splice(i, 1);
                    break;
                }
            }
        }
    }
};
在脚本的顶部

然后,将以下代码放在API末尾或初始化API时

target.fire("onApiReady");

JSFIDLE:。(在我的演示中,我使用了
setTimeout
来模拟脚本加载)

事件发射器通常是通过使用一个备份对象来实现的,该对象将事件名称映射到事件处理程序数组。您有一个
on(eventName,handler)
方法将新的处理程序推送到eventName键中的数组,还有一个
trigger(eventName)
方法在事件上调用处理程序。我想我能够实现,但我真的不知道如何只为事件调用一次,然后能够从脚本中的任何位置与他关联,类似于:完整的_SCRIPT.fire('onApiReady'),然后在另一个文件中完整的_SCRIPT.addEventListener('onApiReady',callback);这正是我的意思,但是我如何在不使用外部库的情况下实现它呢?我希望在不使用jQuery的情况下执行此操作。document.on不起作用。@势不可挡,我正在想出一个答案。请稍候;)
target.fire("onApiReady");