JavaScript监听模式

// 事件对象
var Event = function(obj) {
    this.obj = obj;
    this.getSource = function() {
        return this.obj;
    }
}
// 监听对象
var F2 = function() {
    this.hander = function(event) {
        var f2 = event.getSource();
        console.log("f2 do something!");
        f2.callback();
    }
}
// 被监听对象
var F1 = function() {
    this.abc = function() {
        console.log("f1 do something one!");
        // 创建事件对象
        var e = new Event(this);
        // 发布事件
        this.f2.hander(e);
        console.log("f1 do something two!");
    }

    this.on = function(f2) {
        this.f2 = f2;
    }

    this.callback = function() {
        console.log("f1 callback invoke!");
    }
}
// 主函数
function main() {
    var f1 = new F1();
    var f2 = new F2();
    // 加入监听
    f1.on(f2);
    f1.abc();
}
// 运行主函数
main();  
原文地址:https://www.cnblogs.com/jpit/p/7234163.html