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)
JavaScript Patterns 4.7 Init-Time Branching的更多相关文章
- JavaScript Patterns 5.4 Module Pattern
		MYAPP.namespace('MYAPP.utilities.array'); MYAPP.utilities.array = (function () { // dependencies var ... 
- JavaScript Patterns 7.1 Singleton
		7.1 Singleton The idea of the singleton pattern is to have only one instance of a specific class. Th ... 
- JavaScript Patterns 6.7 Borrowing Methods
		Scenario You want to use just the methods you like, without inheriting all the other methods that yo ... 
- JavaScript Patterns 6.6 Mix-ins
		Loop through arguments and copy every property of every object passed to the function. And the resul ... 
- JavaScript Patterns 6.5 Inheritance by Copying Properties
		Shallow copy pattern function extend(parent, child) { var i; child = child || {}; for (i in parent) ... 
- JavaScript Patterns 6.4 Prototypal Inheritance
		No classes involved; Objects inherit from other objects. Use an empty temporary constructor function ... 
- JavaScript Patterns 6.3 Klass
		Commonalities • There’s a convention on how to name a method, which is to be considered the construc ... 
- JavaScript Patterns 6.2 Expected Outcome When Using Classical Inheritance
		// the parent constructor function Parent(name) { this.name = name || 'Adam'; } // adding functional ... 
- JavaScript Patterns 6.1 Classical Versus Modern Inheritance Patterns
		In Java you could do something like: Person adam = new Person(); In JavaScript you would do: var ada ... 
随机推荐
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
			计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ... 
- 设计模式之Iterator模式(2)
			这篇文章比较简单,作一个笔记. 模拟Iterator. Iterator接口: package cn.asto.Interator; public interface Iterator { publi ... 
- iOS第三方类库汇总【持续更新】
			在我们平时开发中会经常使用一些第三方开发的开源类库.这样会有效地提高我们开发项目的效率,在这里我找了好几十个进行一个汇总,供大家参考使用,方便大家在需要的时候能容易找到. UI篇 awesome-io ... 
- jQuery源码分析之=>jQuery的定义
			最近写前段的代码比较多,jQuery是用的最多的一个对象,但是之前几次看了源码,都没搞清楚jQuery是怎么定义的,今天终于看明白怎么回事了.记录下来,算是一个新的开始吧. (文中源码都是jQuery ... 
- Sprint Three 回顾与总结&发表评论&团队贡献分
			● 一.回顾与总结 (1)回顾 燃尽图: Sprint计划-流程图: milestones完成情况如下: (2)总结 从sprint one到three,我们团队配合十分默契,互相帮助,虽然遇到了不少 ... 
- Websocket 概述
			WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). [[ from websocket是什么原理? ]] 一.WebSocke ... 
- nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板
			上一篇简单的实现了下照片的展现跟浏览功能,这一篇我将给这个程序添加一个留言的功能.那么留言的话肯定要涉及到数据持久了,其实对于这个小功能的话,用个xml就可以,不过为了看起来更加高大上,我决定使用mo ... 
- 安装、部署... Windows服务 .net程序 安装 命令
			@echo offInstallutil.exe 程序目录 F:\test\TestWindows.exe 服务程序目录@sc start "服务名称"@sc config &qu ... 
- node.js实现CURL功能
			PHP中的CURL功能很好实现,直接四五行代码封装一下就OK了.node.js中如何实现CURL的功能呢,下面详细介绍. 这里需要用到request这个库,所以先安装此包: npm install r ... 
- JMS学习(三)JMS 消息结构之属性及消息体详解
			一.前言 通过上一篇的学习我们知道了消息分为三个部分,即消息头,属性及消息体,并对消息头的十个属性进行了详细的介绍,本文再对消息属性及消息体进行详细的介绍. 二.属性介绍 消息属性的主要作用是可以对头 ... 
