zoukankan      html  css  js  c++  java
  • 每周优秀代码赏析系列【二】Jif

    一.简介

    Jif是一个轻量级的events,Jif提供了事件监听on、发送send和清空clear接口,我们可以为其扩展remove 等接口。

    Jif也是观察者模式的一种优雅实现。

    二.代码公布

    下面就公布本周的优秀代码:

            var Jif = function () {
                this._listeners = {};
            };
    
            Jif.prototype = (function (undefined) {
                return {
                    on: function (event, callback) {
                        if (this._listeners[event] === undefined) {
                            this._listeners[event] = [];
                        }
    
                        this._listeners[event].push(callback);
                    },
    
                    clear: function (event, callback) {
                        var listeners = this._listeners[event];
                        var i = listeners.length;
    
                        if (listeners === undefined) {
                            throw new Error('Unknown event type: ' + event);
                        }
    
                        if (callback === undefined) {
                            this._listeners[event] = [];
                            return;
                        }
    
                        while (i > 0) {
                            i -= 1;
                            if (listeners[i] === callback) {
                                this._listeners[event].splice(i, 1);
                            }
                        }
                    },
             
                    send: function (event, msg) {
                        var listeners = this._listeners[event];
                        var i = listeners.length;
    
                        if (listeners === undefined) {
                            throw new Error('Unknown event type: ' + event);
                        }
    
                        while (i > 0) {
                            i -= 1;
                            listeners[i](msg);
                        }
                    }
                };
            })();

    三.用法

            var events = new Jif();
            //订阅天气
            events.on('weather', function (weather) {
                alert('today is   ' + weather.condition);
            });
            //发布天气
            events.send('weather', { condition: 'sunny' });

    可以看得出来,这里实现了发布与订阅,但是忽略了发布者和订阅者的概念,而是统一由events中转。

    四.其他相关链接

    Observer Design Pattern Using JavaScript:http://www.codeproject.com/KB/scripting/Observer_Pattern_JS.aspx

    javascript观察者模式: http://www.cnblogs.com/rubylouvre/archive/2010/03/29/1699203.html

    Javascript乱弹设计模式系列(1) - 观察者模式(Observer):http://www.cnblogs.com/liping13599168/archive/2009/01/01/1366599.html

  • 相关阅读:
    法正(25):劝降
    单例模式
    Redis学习笔记(六)---List
    canvas的使用
    HTML5的新特性
    html学习笔记一
    matlab无法使用
    Hadoop笔记(一)
    PL/SQL笔记(一)
    Oracle数据库(二)
  • 原文地址:https://www.cnblogs.com/iamzhanglei/p/2229177.html
Copyright © 2011-2022 走看看