由于web开发所常见的多平台适应问题,往往根据对象能力检测或者浏览器检测(不推荐
)采用不同的处理方法是不可避免的。
如常见的事件处理还要分作 W3C 和 IE系列 两套解决代码,(这里更说明了
对象能力检测为何优于
浏览器检测,你可不知道会不会有哪个变态浏览器不声明自己是IE,却用着IE的事件处理方式)
。
那么说道如何解决
不同的处理方法问题,拿事件处理举例,可能不少书或者文章都这么说(看得有点腻了
),自己写一个函数把两者差异封装一下:
function myAddEvent(el,event,fuc) {
if(el.addEventListener) {
//W3C style
} else if(el.attachEvent){
//IE style
} else {
//old ways
el['on'+event]=func;
}
}
我觉得这是传统语言的思路(只能用 if 来 分支语句),这样的话,我们每次添加事件都需要比较对象能力,其实对象有无能力只要比较一次就可以了,以后添加事件完全没必要再执行 IF 判断 。
既然 javascript 可以把函数 作为一段代码的封装,那么我们只要初始判断好,每次都调用相应的代码块(函数不就行了么),由此可得下面函数 :
(很少看到过,不记得是自己原创还是偶然看别人使用过,http://yiminghe.iteye.com/blog/353762
用过一次)
var myAddEvent = (function () {
if (window.addEventListener) {
return function (el, eventName, fn) {
el.addEventListener(eventName, fn, false);
};
} else if (window.attachEvent) {
return function (el, eventName, fn) {
el.attachEvent("on" + eventName, fn);
};
} else {
return function (el, eventName, fn) {
el['on' + eventName] = fn;
};
}
})();
这样的话,相当于一开始就把各个平台应该执行的代码块存起来,这样子下次就不用判断直接运行了,脚本语言就是灵啊。
ps: 后在 Pro javascript design pattern 中看到这种叫做 branching(分支),用来把浏览器间的差异封装到运行期间进行设置的动态方法技术。
能够在运行时动态的确定函数代码的能力,正是javascript的高度灵活性和强大表现力的一种体现。
ps2:传统技术中也有类似的应用,例如 "即时代码生成"技术,函数可以在运行时查看各参数值,然后为它的函数体生成更加高效的,直接针对特定参数值执行的代码,然后跳到这些代码去运行。
分享到:
相关推荐
4. **脚本元素**:`<scriptlet>`、`<declaration>` 和 `<expression>` 是JSP脚本元素,其中 `<scriptlet>` 用于插入Java代码块,`<declaration>` 用于声明变量或方法,`<expression>` 则用于插入Java表达式结果。...
总的来说,通过研究这个压缩包中的代码,开发者不仅可以学习到微信小程序的基础知识,还能深入理解小游戏的开发流程和技巧,这对于提升微信小程序开发能力是非常有益的。如果你是初学者,建议先从整体上理解代码结构...
在Java实际开发中,开发者经常会遇到各种挑战,需要掌握一些实用的小技巧来提高代码质量、提升效率。以下是一些从博客文章"Java实际开发中的小技巧汇总"中可能涵盖的知识点,结合“源码”和“工具”的标签,我们可以...
### VB使用的10个小技巧详解 #### 1. 如果一行程序太长,能否换行? 在Visual Basic(简称VB)编程环境中,如果遇到一行代码过长的情况,可以通过在需要换行的位置后面添加下划线“_”的方式进行换行。这种方法...
下面,我们将深入探讨一些实用的JavaScript实践小技巧,这些技巧可以帮助开发者提升代码效率、可读性和维护性。 1. **立即执行函数表达式(IIFE)**:在JavaScript中,IIFE是一种常见的封装技术,避免全局变量污染...
3. **代码折叠与展开**:使用Ctrl+M+M可以折叠当前代码块,便于查看整体结构;再次使用此快捷键则展开。 4. **智能提示**:输入代码时,VC会自动提供相关函数、变量等的智能提示,通过Tab键可快速插入,提升编码...
4. **格式化和重构**:工具可能会有代码格式化功能,使代码更加整洁易读,同时提供重构建议,比如将重复的代码块提取成函数,或者改善变量命名,提高代码可维护性。 5. **错误检查**:自动检查潜在的语法错误或逻辑...
在编写代码时,注意将重复的代码块抽取成函数或类,提高代码复用性。同时,保持函数和类的单一职责,使得代码结构清晰,易于理解和维护。 3. **异常处理** 使用try-catch语句来捕获和处理可能出现的运行时错误。...
对于关键代码块,简洁明了的单行注释也很重要。 2. **异常处理**:合理使用`try-catch-finally`语句块,确保资源在任何情况下都能正确关闭。优先考虑使用具体的异常类型,而不是笼统的`Exception`。 3. **集合框架...
- **合并重复的代码块,创建可重用的函数或宏**:识别并提取代码中的重复部分,将其封装为独立的函数或宏。这样不仅可以减少代码体积,还可以提高代码的可维护性和可读性。 #### 2. 合理使用宏定义 - **使用`#...
### Java代码性能优化23种技巧详解 #### 一、避免在循环条件中使用复杂表达式 在Java中,尤其是在不进行编译器优化的情况下,循环条件会在每次迭代时都被重新计算。如果循环条件涉及复杂的表达式或者动态计算,这...
6. **异常处理**:理解和运用C++的异常处理机制,如try-catch块,可以编写出健壮的代码,应对运行时可能出现的问题。 7. **多线程编程**:VC++提供了对多线程的支持,理解线程同步机制,如互斥锁、信号量和事件,...
这个"JavaScript小技巧全集"涵盖了各种提升开发效率和代码质量的技巧,旨在帮助开发者更好地理解和运用这门语言。 1. 变量声明与作用域: - 使用`let`和`const`代替`var`来避免变量提升和作用域污染。 - 了解块级...
本篇文章将深入探讨Linux块设备驱动的基本概念、工作原理,并通过给出的代码例子进行解析。 首先,我们要理解Linux内核是如何管理块设备的。Linux内核维护了一个块设备层,它抽象了硬件的具体细节,提供了统一的...
【ASP小游戏源代码】是一种基于Active Server Pages(ASP)技术开发的小型互动游戏程序,它允许用户在网页上进行游戏体验。ASP是微软推出的一种服务器端脚本环境,主要用于动态网页的创建。在这个压缩包中,包含的是...
从描述来看,此源码已经过测试,可以完美运行,这意味着你可以直接查看并理解代码结构,学习如何实现2048游戏的逻辑、UI设计以及与微信平台的接口交互。通过分析源码,你可以掌握以下知识点: 1. **微信小游戏开发...
在VC++编程中,开发者经常会遇到各种挑战,而掌握一些实用的小技巧能够极大地提升开发效率和代码质量。本文将基于“vc编程小技巧收集”这一主题,深入探讨几个常见的问题及解决方案。 1. **内存管理**:在VC++中,...
【标题】"俄罗斯方块小程序源代码(VC++)" 是一个基于Microsoft Visual C++编写的经典游戏项目,它展示了如何使用C++编程语言来实现一个互动的、图形化的游戏应用。这个源代码集合提供了开发俄罗斯方块游戏的全部...
8. **程序调试与优化**:编写游戏代码的过程中,会涉及到错误检查、调试技巧以及性能优化,这是任何编程项目中都必不可少的技能。 通过实践这个MATLAB实战应用案例,不仅能掌握MATLAB的基本编程技能,还能了解到...
总结,"拼图小游戏(VB代码)"项目涵盖了VB编程语言的基本使用、事件驱动编程、算法设计、界面设计、对象和类的概念、文件操作、错误处理及调试技巧等多个知识点,对于学习VB的人来说,这是一个很好的实践案例,能...