zoukankan      html  css  js  c++  java
  • JavaScript Patterns 4.7 Init-Time Branching

    When you know that a certain condition will not change throughout the life of the program, it makes sense to test the condition only once. Browser sniffing (or feature detection) is a typical example.

    // BEFORE
    
    var utils = {
    
        addListener : function(el, type, fn) {
    
            if ( typeof window.addEventListener === 'function') {
    
                el.addEventListener(type, fn, false);
    
            } else if ( typeof document.attachEvent === 'function') {// IE
    
                el.attachEvent('on' + type, fn);
    
            } else {// older browsers
    
                el['on' + type] = fn;
    
            }
    
        },
    
        removeListener : function(el, type, fn) {
    
            // pretty much the same...
    
        }
    };
    
    // AFTER
    
    // the interface
    
    var utils = {
    
        addListener : null,
    
        removeListener : null
    
    };
    
    // the implementation
    
    if ( typeof window.addEventListener === 'function') {
    
        utils.addListener = function(el, type, fn) {
    
            el.addEventListener(type, fn, false);
    
        };
    
        utils.removeListener = function(el, type, fn) {
    
            el.removeEventListener(type, fn, false);
    
        };
    
    } else if ( typeof document.attachEvent === 'function') {// IE
    
        utils.addListener = function(el, type, fn) {
    
            el.attachEvent('on' + type, fn);
    
        };
    
        utils.removeListener = function(el, type, fn) {
    
            el.detachEvent('on' + type, fn);
    
        };
    
    } else {// older browsers
    
        utils.addListener = function(el, type, fn) {
    
            el['on' + type] = fn;
    
        };
    
        utils.removeListener = function(el, type, fn) {
    
            el['on' + type] = null;
    
        };
    
    }

    References: 

    JavaScript Patterns - by Stoyan Stefanov (O`Reilly)

  • 相关阅读:
    动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区
    auto, extern, register, static
    #include <iomanip>
    use
    ZooKeeper某一QuorumPeerMain挂了
    python 中的 字符串 列表 元祖 字典
    JAVA的23种设计模式
    spark job分析
    Spark1
    SQL三大范式
  • 原文地址:https://www.cnblogs.com/haokaibo/p/Init-Time-Branching.html
Copyright © 2011-2022 走看看