JS编程模式之初始化分支与惰性初始
不同的浏览器对于相同或相似的方法可能有不同的实现。这时,您需要依据当前的浏览器的支持方法来选择对应的执行分支。这类分支有可能与很多,因此可能会减缓脚本的执行速度。但非要等到运行时才能分支吗?我们完全可以在加载脚本时,在模块初始化的过程中就将部分代码进行分支处理。这显然更有利于提高效率。利用Javascript代码可以动态定义的特性,我们可以为不同的浏览器定制不同的实现方法,下面我们以定义事件处理程序举例:
初始化分支:
var MYAPP = {};
MYAPP.event = {
addListener: null, //事后可能会被赋值为对象或函数的变量,都应该初始为null
removeListener: null
};
//当脚本执行时,我们主动去执行分支,而不是等到用到事件处理时候
if (window.addEventListener) { //支持addEventListener的浏览器
MYAPP.event.addListener = function (el, type, fn) {
el.addEventListener(type, fn, false);
};
MYAPP.event.removeListener = function (el, type, fn) {
el.removeEventListener(type, fn, false);
};
} else if (document.attachEvent) { //IE
MYAPP.event.addListener = function (el, type, fn) {
el.attachEvent("on"+type, fn);
};
MYAPP.event.removeListener = function (el, type, fn) {
el.detachEvent("on"+type, fn);
};
} else { //older browsers
MYAPP.event.addListener = function (el, type, fn) {
el["on"+type]=fn;
};
MYAPP.event.removeListener = function (el, type, fn) {
el["on"+type]=null;
};
}
惰性初始:
惰性初始模式与上面的初始化分支模式很相似。不同之处在于,该模式下的分支只有在相关函数第一次被调用时才会发生-----即只有函数被调用时,它才会以最佳实现改写自己。
var MYAPP = {};
MYAPP.event = {
addListener: function (el, type, fn) {
//无论触发哪个条件,都会重写MYAPP.event.addListener方法
if (el.addEventListener) {
MYAPP.event.addListener = function (el, type, fn) {
el.addEventListener(type, fn, false);
};
} else if (el.attachEvent) {
MYAPP.event.addListener = function (el, type, fn) {
el.attachEvent("on"+type, fn);
};
} else {
MYAPP.event.addListener = function (el, type, fn) {
el["on"+type]=fn;
};
}
//注意,前面只是在第一次调用函数时,函数被重写了,注意“调用”二字,但是目前为止我们还没执行函数,所以最后要执行以下
MYAPP.event.addListener(el, type, fn);
}
};
JS编程模式之初始化分支与惰性初始的更多相关文章
- javascript常见编程模式举例
近期买到手了一本<javascript框架设计>,具体介绍开发js框架所用到的知识.初读一点,乐帝脆弱的理论修养就暴露无遗了,所以专门加强理论修养,重看javascript编程模式的举例. ...
- Javascript编程模式(JavaScript Programming Patterns)Part 2.(高级篇)
模块编程模式的启示(Revealing Module Pattern) 客户端对象(Custom Objects) 懒函数定义(Lazy Function Definition) Christian ...
- JS编程最佳实践
最近花了一周时间把<编写可维护的js> 阅读了一遍, 现将全书提到的JS编程最佳实践总结如下, 已追来者! 1.return 之后不可直接换行, 否则会导致ASI(自动分号插入机制)会在r ...
- 面向对象的js编程 Call和apply方法
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 一.方法定义 1.call 方法 语法:call([thisObj[,arg1[, arg2[, [,.arg ...
- JS编程常识
一.UI层的松耦合 松耦合就是要求各层遵循“最少知识原则”,或者说是各层各司其职,不要越权: HTML:结构层 CSS:表现层 JS:行为层 对于各层的职能,有一句比较贴切的解释:HTML是名词(n) ...
- CUDA 标准编程模式
前言 本文将介绍 CUDA 编程的基本模式,所有 CUDA 程序都基于此模式编写,即使是调用库,库的底层也是这个模式实现的. 模式描述 1. 定义需要在 device 端执行的核函数.( 函数声明前加 ...
- 利用MVC编程模式-开发一个简易记事本app
学了极客学院一个开发记事本的课程,利用自己对MVC编程模式的简单理解重写了一遍该app. github地址:https://github.com/morningsky/MyNote MVC即,模型(m ...
- Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)
JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...
- JAVA学习篇--JAVA两种编程模式控制
在Drp项目中,解说了两种编程模式Model 1和Model2.以下是对这两种模式的简单理解.以及因为Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对照学习一下. ...
随机推荐
- XML注释与Description标签及Java:注解(Annotation)的关系
NET中的规范标准注释(一) -- XML注释标签讲解 一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来 ...
- linux安装xgboost
在学校服务器上安装xgboost,事先我已经安装了anaconda,但是因为师兄已经装了python所以没加入到path. 网上的方法一般都要编译,另外官方的下载方法要联网..总之出了一堆错,最终还是 ...
- py编码终极版
说起python编码,真是句句心酸.算起来,反复折腾两个来月了.万幸的是,终于梳理清楚了.作为一个共产主义者,一定要分享给大家.如果你还在因为编码而头痛,那么赶紧跟着我咱们一起来揭开py编码的真相吧! ...
- Python中常见的异常处理
异常和错误 part1:程序中难免出现错误,而错误分成两种 1. 语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范一 if # 语法错误示范二 d ...
- 谈谈contentWindow 和contentDocument以及 iframe
1,contentWindow:是用来获取子窗口的window对象的,它兼容各大浏览器,用法如下 document.getElementById("iframeId").conte ...
- Java面向对象作业-用接口方式测试向下转型
Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...
- “Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle)instead”
“Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(B ...
- Python基础学习六 操作Redis
import redis r = redis.Redis(host=',db=1) #set get delete setex 都是针对string类型的 k-v # r.set('louis_ses ...
- docker 启动redis容器
dockerfile FROM registry.cn-hangzhou.aliyuncs.com/xxxholic/redis COPY redis.conf EXPOSE redis.conf p ...
- IDEA启动缓慢且运行卡顿
最近在自己的机器上用IDEA时启动竟然要半分钟,且启动后索引操作居然还需要等待很久.并且每次通过IDEA执行JAVA项目在启动和关闭时都会发生卡顿.明明机器的配置不错,这是为啥呢? 这是因为为IDEA ...