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)

  • 相关阅读:
    第四章JAVA EE基础知识
    第二章代码审计环境搭建
    第三章代码审计辅助工具简介
    python json.dumps 中文需要注意的事项
    multiprocessing 使用实践
    Python中*args和**kwargs的使用实践
    python 继承学习记录
    关于vue-element-admin启动项目遇到的一些问题
    @RequestParam
    前端菜单点击切换样式,菜单控制iframe
  • 原文地址:https://www.cnblogs.com/haokaibo/p/Init-Time-Branching.html
Copyright © 2011-2022 走看看