`

JavaScript 一些函数

阅读更多
 第一:onload

    网页加载完执行的函数,这个代码是从十大常用javascript的函数里面摘取的,当然有其他的实现方法,但这个函数写的真的非常巧妙。从效率方面也是一个非常值得使用的函数!
以下就是具体代码:
//--------------------------------------------------------
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
oldonload();
func();
}
}
}
//--------------------------------------------------------
    我不想一句一句的分析这个addLoadEvent,那是高手们很难接受的!我们就来说说它的兼容性!请看函数中window.onload,作者为什么不用document.body.onload呢?那是因为在Firefox[以下全部简称ff]下document.body.onload是 undefined(未定义),把一个函数赋值给undefined既不会发生什么事情,也不算出错!这个是让人头痛!好的,知道兼容性的厉害了吧?那么,以后在编写代码时注意一下就好了!

第二:body

    这个body对象也是困扰我们的东西,叫它对象不知道对不对?我不是学计算机专业的,专业术语还真不大清楚!
以下就是具体代码:
//--------------------------------------------------------
function getPageScroll(){
var yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
}
// Explorer 6 Strict
else if (document.documentElement && document.documentElement.scrollTop){
yScroll = document.documentElement.scrollTop;
} else if (document.body) {// all other Explorers
yScroll = document.body.scrollTop;
}
arrayPageScroll = new Array('',yScroll)
return arrayPageScroll;
}
//--------------------------------------------------------
    这个函数作用是:浏览器滚动条滚动的高度读取。这是从lightbox中摘录的,读读这段代码,看到三次判断:
1.if (self.pageYOffset)对ff进行判断处理;
2.if (document.documentElement && document.documentElement.scrollTop)是对网页标准(xHTML 1.1 DTD)的判断,这里要说明一下:在加入 xHTML 1.1 DTD 文件头时document.body.scrollTop之类的值往往是0,而这个是很难被调试察觉的(我曾因此困惑很久,这里吐血传授经验啦!);
3.则是我们常用document.body.scrollTop。
    从这三次判断,可以想象作者思维的严密了!当然这是程序员的共性!

第三:attachEvent/addEventListener

     这里是比较直接的区别,可是太多的直接却造成了编程的困扰,这不禁使人想起:到底有多少这样的直接不同函数?他们的差别到底在哪里?毕竟大家的大脑空间有限,这么多怎么记?可是这些是必须记住的!没事,这篇文章里常见的js兼容性都提到了,可以作为“家居旅行,随身携带”的小手册!
以下就是具体代码:
//--------------------------------------------------------
_observeAndCache: function(element, name, observer, useCapture) {
if (!this.observers) this.observers = [];
if (element.addEventListener) {
this.observers.push([element, name, observer, useCapture]);
element.addEventListener(name, observer, useCapture);
} else if (element.attachEvent) {
this.observers.push([element, name, observer, useCapture]);
element.attachEvent('on' + name, observer);
}
}
//--------------------------------------------------------
    意思是给对象添加事件。这是Sam Stephenson的prototype中类的一部分,举这段代码,不是让你去慢慢分析那个prototype.js文件,只是说明在ie和Opera 下就可以使用obj.attachEvent(),但在ff下却只能使用obj.addEventListener()。
类似区别的还有:
detachEvent/removeEventListener
parentElement/parentNode
insertAdjacentElement/appendChild
srcElement/target
onmousewheel/DOMMouseScroll
clientY/pageY

第四:对象引用

1.getElementById
请看以下代码:
<!-- 1 -->
<input id="t1"><input type="button"
value="click me" onclick="alert(t1.value)">
<!-- 2 -->
<input id="t1"><input type="button"
value="click me" onclick="alert(document.getElementByIdx('t1').value)">
    两个都是获取文本框的值,但后者的兼容性就比前者好!对于IE来说,一个HTML 元素的ID可以直接在脚本中当作变量名来使用,而ff中不可以。
getElementById这个函数是非常有用、通用的函数,所以在引用对象时我们要尽量使用它!
2.var
请看以下代码:
//--------------------------------------------------------
echo=function(str){
document.write(str);
}
//--------------------------------------------------------
    这个函数在ie上运行正常,ff下却报错了,而在echo前加上var就正常了,这个就是我们提到var的目的。
3.[]
    document.forms(”formName”) 改为 document.forms[”formName”]目的:现有代码中许多集合类对象取用时使用 (),ie 能接受,ff 却不能。
4.frame的引用
    ie可以通过id或者name访问这个frame对应的window对象,而mf只可以通过name来访问这个frame对应的window对象。

第五:脚本执行

    让我们分别做个试验,请出ie和ff分别运行一下下面一段js:
//--------------------------------------------------------
o={
foo: function(){
alert("fly");
}
};
with (o) {
bar();
function bar(){
alert("fly");
}
foo();
}
//--------------------------------------------------------
    IE下,上面的代码成功输出fly,ff报错:bar未定义!
    当然这是一个小小的试验,大家很明显的看出ie和ff的支持执行的情况:ie脚本预解释执行,ff脚本顺序执行!这是javascript编写和设计时必须注意的东西!

第六:XMLHttpRequest对象

请看以下代码
//--------------------------------------------------------
function createRequest(){
if(typeof XMLHttpRequest!="undefined")? {
return new XMLHttpRequest();
}else if(typeof ActiveXObject!="undefined"){
var xmlHttp_ver? = false;
var xmlHttp_vers = [
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp",
"Microsoft.XmlHttp"
];
if(!xmlHttp_ver){
for(var i=0;i<xmlHttp_vers.length;i++){
try{
new ActiveXObject(xmlHttp_vers[i]);
xmlHttp_ver = xmlHttp_vers[i];
break;
}catch(oError){;}
}
}
if(xmlHttp_ver){
return new ActiveXObject(xmlHttp_ver);
}else{
throw new Error("Could not create XML HTTP Request.");
}
}else{
throw new Error("Your browser doesn't support an XML HTTP Request.");
}
}
//--------------------------------------------------------
    意思是:得到XMLHttpRequest对象,是喜悦村里的一个兄弟写的。在ie下,一句new ActiveXObject("MSXML2.XMLHTTP")就可以搞定的东西,但这里我们花了这么多行代码来解决兼容性问题,这个函数作者更从原理入手:xmlHttp_vers 应该从版本高的往版本低的写,这样建立对象的数据调用的是你机子上安装过的最高版本的MSXML2.XmlHttp。十分巧妙和有效地得到了对象!

    好了,其实关于javascript兼容性的例子还有很多,我们无法罗列所有,这里做了个简单介绍,更多的只能在编程工程中去慢慢体会了!当然本文仅仅讨论了js的兼容性,同时css的兼容性问题也是不可忽视的!解决兼容性最好的方法就是封装!那么下次有机会再和大家一起研究一下css的兼容性和 js的封装问题!这篇结合自己的经验和网上朋友的经验凑成的文章就到这里了。不知道大家感觉怎样?有没有得到收益?如果有一点点,我的任务就完成了!
分享到:
评论

相关推荐

    javascript函数式编程

    JavaScript函数式编程是利用JavaScript语言编写函数式风格代码的一种编程范式。函数式编程强调使用纯函数、避免副作用、函数的不可变性以及利用高阶函数等概念。通过阅读《JavaScript函数式编程指南》,读者可以了解...

    JavaScript函数式编程.pdf

    不过,由于【标题】中提供了文档的名称——"JavaScript函数式编程.pdf",我可以根据这个名称扩展出关于JavaScript函数式编程的知识点。 JavaScript函数式编程的知识点非常丰富,涉及很多方面的内容,下面将详细介绍...

    javascript_函数大全

    ### JavaScript函数大全解析 在深入探讨JavaScript函数的广泛应用与特性之前,让我们首先明确一点:JavaScript函数不仅是编程语言中的核心组件,更是实现复杂逻辑、封装功能模块的关键所在。不同于许多传统面向对象...

    JavaScript之函数(ppt)

    JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数...

    javascript指南和函数式编程

    而《JavaScript函数式.zip》可能是一份关于JavaScript函数式编程的资料集合,函数式编程是一种编程范式,强调使用函数和避免改变状态。其中可能涵盖以下知识点: 1. **纯函数**:理解纯函数的定义,即给定相同的...

    C#与JAVASCRIPT函数的相互调用 C#调用JAVASCRIPT函数的调用 JAVASCRIPT调用C#函数的调用

    C#与JAVASCRIPT函数的相互调用 C#调用JAVASCRIPT函数的调用 JAVASCRIPT调用C#函数的调用

    javascript实现根据函数名称字符串动态执行函数的方法示例

    在JavaScript编程中,有时会遇到需要根据函数名的字符串形式来动态执行对应函数的场景。这类技术能够提供一种灵活的方式来执行代码,尤其在进行插件化开发、事件驱动编程或实现钩子函数时非常有用。为了实现这一功能...

    JavaScript函数(源代码)

    JavaScript函数(源代码)JavaScript函数(源代码)JavaScript函数(源代码)JavaScript函数(源代码)JavaScript函数(源代码)JavaScript函数(源代码)JavaScript函数(源代码)JavaScript函数(源代码)...

    JavaScript ES6函数式编程入门经典

    JavaScript支持函数式编程,并允许开发者编写精心设计的代码。  主要内容  ●掌握函数式编程的概念  ●清楚函数在JavaScript中的地位  ●理解真实的函数式类库,并创建一个模拟underscore.js的函数式类库 ...

    javascript 的函数的使用

    javascript的函数的简单使用小实例

    javascript函数速查

    JavaScript函数是编程语言的核心组成部分,它是一段可重复使用的代码块,可以接受参数并返回值。在JavaScript中,函数不仅可以作为表达式,还能作为变量赋值、作为参数传递以及作为返回值。本速查指南将深入探讨...

    javascript常用判断函数

    本文将详细讲解JavaScript中的几个常见判断函数,这些函数可以帮助开发者进行数据类型的检查和验证。 首先,我们来看`DataLength`函数。这个函数的主要功能是计算字符串的长度,但与JavaScript原生的`length`属性...

    javascript强制函数自动执行.pdf

    ### JavaScript中的函数声明与函数表达式 在JavaScript中,函数是一种非常重要的编程构造,它可以被定义为函数声明或函数表达式。这两种定义方式各有特点,并且在不同的上下文中有着不同的行为。 #### 函数声明...

    javascript函数速查手册

    JavaScript函数是编程语言的核心组成部分,尤其在Web开发中起着至关重要的作用。这份"JavaScript函数速查手册"涵盖了JavaScript函数的各个方面,旨在帮助开发者快速查找和理解各种函数的用法和特性。 一、函数基础 ...

    一本关于JavaScript中函数式编程的书

    JavaScript的数组和对象虽然不完全是函数式数据结构,但可以模拟一些函数式特性,如链式操作。一些库如Immutable.js提供了不可变数据结构,遵循函数式编程的原则。 总的来说,JavaScript中的函数式编程提供了编写更...

    javascript绘图函数库

    这个函数库还可能包含了一些高级功能,如动画支持、事件监听、图层管理等,以增强图形的交互性和动态性。开发者通过调用这些函数,可以轻松地创建图表、游戏、数据可视化等多种应用场景。 在实际应用中,使用这样的...

    JavaScript函数式编程pdf

    JavaScript函数式编程是一种编程范式,它将计算视为数据处理,并强调使用无副作用的纯函数。在JavaScript中,函数式编程允许我们写出更简洁、可读性更强的代码,同时提高了代码的复用性和测试性。《JavaScript函数式...

Global site tag (gtag.js) - Google Analytics