addEventListener na obiekcie niestandardowym

Stworzyłem obiekt, który ma kilka metod. Niektóre z tych metod są asynchroniczne, dlatego chcę użyć zdarzeń, aby móc wykonywać działania, gdy metody są wykonywane. W tym celu próbowałem dodać obiekt addEventListener do obiektu.

jsfiddle

var iSubmit = {
    addEventListener: document.addEventListener || document.attachEvent,
    dispatchEvent: document.dispatchEvent,
    fireEvent: document.fireEvent,   


    //the method below is added for completeness, but is not causing the problem.

    test: function(memo) {
        var name = "test";
        var event;
        if (document.createEvent) {
            event = document.createEvent("HTMLEvents");
            event.initEvent(name, true, true);
        } else {
            event = document.createEventObject();
            event.eventType = name;
        }
        event.eventName = name;
        event.memo = memo || { };

        if (document.createEvent) {
            try {
                document.dispatchEvent(event);
            } catch (ex) {
                iAlert.debug(ex, 'iPushError');
            }
        } else {
            document.fireEvent("on" + event.eventType, event);
        }
    }
}

iSubmit.addEventListener("test", function(e) { console.log(e); }, false);


//This call is added to have a complete test. The errors are already triggered with the line before this one.

iSubmit.test();

Spowoduje to zwrócenie błędu:Failed to add eventlisterens: TypeError: 'addEventListener' called on an object that does not implement interface EventTarget."

Teraz ten kod zostanie użyty w aplikacji mapowania telefonu, a kiedy to zrobię, działa na systemie Android / ios. Jednak podczas testowania byłoby miło, gdybym mógł go uruchomić w co najmniej jednej przeglądarce.

PS> Wiem, że mogę włączyć bulgotanie, a następnie słuchać katalogu głównego dokumentu, ale chciałbym mieć tylko trochę OOP, gdzie każdy obiekt może działać samodzielnie.

questionAnswers(10)

yourAnswerToTheQuestion