发布/订阅模式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>发布&订阅模式</title>

<script>

var PubSub = {

  subscribe: function (ev, callback) {

        // 创建 _callbacks 对象,除非它已经存在了

        var calls = this._callbacks || (this._callbacks = {});

        

        // 针对给定的事件 key 创建一个数组,除非这个数组已经存在

        // 然后将毁掉函数追加到这个数组中

        (this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback);

        return this;

    },

    

    publish: function () {

        // 将 arguments 对象转化为真正的数组

        var args = Array.prototype.slice.call(arguments, 0);

        

        // 拿出第 1 个参数,即事件名称

        var ev = args.shift();

        

        // 如果不存在,_callbacks 对象,则返回

        // 或者如果不包含给定事件对应的数组

        var list, calls, i, l;

        if (!(calls = this._callbacks)) return this;

        if (!(list = this._callbacks[ev])) return this;

        

        // 触发回调

        for (var i = 0, l = list.length; i < l; i++) {

            list[i].apply(this, args);

        }

        return this;

    }

};



// 使用方法

PubSub.subscribe('wem', function () {

    alert('Wem');

});



PubSub.publish('wem');

</script>

</head>



<body>

</body>

</html>

 

你可能感兴趣的:(模式)