来自 服务器&运维 2019-12-29 05:22 的文章
当前位置: 澳门威尼斯人平台 > 服务器&运维 > 正文

Javascript 判断函数类型完美解决方案_javascript技巧_脚本之家

由于很多移动终端不支持 Flash,因此 许多绚丽多彩的 Flash效果出不来。如果,能够判断出访问Web网页的类型。就可以对症下药,找出解决的办法! 访问的类型为移动终端我们就用.gif代替Flash动画,PC端就不做改变。这样就比较完美了! 如下所示,函数 flashChecker() 就是用来检测访问的类型。 复制代码 代码如下:

但是,有一些细节并不为我们所熟知。John Resig 在分析了这些细节之后,为我们提供了一个完美的解决方案,本文将作详细介绍: 一、传统方法不为人所知的细节 毫无疑问,在判断函数类型时,我们使用的是typeof方法,比如: 复制代码 代码如下:function fn(){ //content } alert//结果是"function"。 但是,该方法在一些浏览器中并不是像我们想像的那样工作。 1、Firefox2和Firefox3 在这两个浏览器中,用typeof检测HTML对象元素的类型,得到是一个不精确的“function”结果,而不是“object”,如HTMLDocument。如: 复制代码 代码如下:alert; //在Firefox2中结果是"function"; //在Firefox3中结果是"object"; 2、Firefox2 对于正则表达式,在该浏览器中返回的结果是“function”(在Firefox3中结果是“object”),如: 复制代码 代码如下:var reg = /test/; alert; //在Firefox2中结果是"function"; //在Firefox3中结果是"object"; 注:本人在safari中测试,其结果也是“function”。 3、IE6和IE7 在IE中对DOM元素使用typeof方法,得到的结果是“object”。如: 复制代码 代码如下:alert(typeof document.getElementsByTagName[0].getAttribute); //结果是"object" 4、Safari 3 safari认为DOM元素的NodeList是一个函数,如: 复制代码 代码如下:alert(typeof document.body.childNodes); //结果是"function" 很明显,如果你要测试一个对象是否为函数,使用typeof方法并不能从真正意义上保证测试结果。那么,我们就需要一种在所有浏览器中都能保证测试结果的解决方案。我们知道function本身有apply两种方法,但这两个方法在IE中存在问题的函数中并不存在,试试下面的测试: 复制代码 代码如下:alert(typeof document.getElementsByTagName[0].getAttribute.call) //在IE中结果是"undefined" 显然,我们不能利用这两个方法。 二、完美解决方案及实现过程 John Resig为我们提供了一个完美的解决方案,这个复杂但很稳定的判断一个对象是否为函数的方法如下: 复制代码 代码如下:function isFunction { return !!fn && !fn.nodeName && fn.constructor != String && fn.constructor != RegExp && fn.constructor != Array && /function/i.test; } 这个函数首先保证测试的对象存在,并将其序列化成含有“function”的字符串,这个是我们检测的基础(fn.constructor != String,fn.constructor != Array, and fn.constructor != RegExp)。另外,我们需要保证声明的函数不是一个DOM节点。然后,我们就可以作toString测试。如果我们将一个函数转换成字符串,在一个浏览器中给我们的结果就像这样“function name(){...}”。现在,判断它是否为函数就很简单,仅仅只需要判断字符串中是否包含单词“function”。这很神奇,对于任何有问题的函数,在所有浏览器中都能得到我们所需要的结果。这个函数较之于传统的方法,运行速度有些不尽人意,作者建议我们保守使用。 John Resig 是jQuery库的开发者,相信使用该库的朋友们对该库简洁的语法和优秀的性能并不陌生。作者除追求代码简洁和性能高效之外,其尽善尽美的精神也让人叹服。如果你是一个完美主义者,相信此文对你很有帮助。

1. 定义类型 复制代码 代码如下: function UserObject { } parameter 可省略,相当于C#中构造函数参数。 2. 实例化自定义类型 复制代码 代码如下:

扩充: 复制代码 代码如下:

3. 添加属性 复制代码 代码如下: function userobject{ this.firstproperty=parameter this.secondproperty="This is the second property" } //使用 复制代码 代码如下:

本文由澳门威尼斯人平台发布于服务器&运维,转载请注明出处:Javascript 判断函数类型完美解决方案_javascript技巧_脚本之家

关键词: