JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布(2)

var vMark = "";
for (var i in b) {
    
if (b[i]) {
        vMark 
= i;
    }
}
if (b.safari) {
    vMark 
= "version";
}
b.version 
= RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";


但参考上面的userAgent会发现opera的获取应该也是用"version"才对啊,问题是它在10之前的userAgent是这样的:
Opera/9.99 (...) Presto/9.9.9
并没有用"version",为了适用大部分情况还是不要用"version"好了,而且这个判断用的也不多。


【Array】

命名空间是:$$A

里面包括以下方法:
isArray:判断对象是否数组
forEach:对数组中的每个元素都执行一次指定的函数(callback)。()
filter:对数组中的每个元素都执行一次指定的函数(callback),并且创建一个新的数组,该数组元素是所有回调函数执行时返回值为 true 的原数组元素。()
every:对数组中的每个元素都执行一次指定的函数(callback),直到此函数返回 false,如果发现这个元素,every 将返回 false,如果回调函数对每个元素执行后都返回 true ,every 将返回 true。()
some:对数组中的每个元素都执行一次指定的函数(callback),直到此函数返回 true,如果发现这个元素,some 将返回 true,如果回调函数对每个元素执行后都返回 false ,some 将返回 false。()
map:对数组中的每个元素都执行一次指定的函数(callback),并且以每次返回的结果为元素创建一个新数组。()
indexOf:比较 searchElement 和数组的每个元素是否绝对一致(===),当有元素符合条件时,返回当前元素的索引。如果没有发现,就直接返回 -1 。()
lastIndexOf:比较 searchElement 和数组的每个元素是否绝对一致(===),当有元素符合条件时,返回当前元素的索引。如果没有发现,就直接返回 -1 。()

以上方法除了isArray,都是JavaScript 1.6里数组增加的方法,具体可以去mozilla查看。

不止数组能使用这些方法,只要对象能像数组那样历遍就能使用,例如NodeList对象,arguments对象。


【Function】

命名空间是:$$F

里面现在只有两个方法:bind和bindAsEventListener。
这两个是prototype.js里面的经典方法了,是用来给function绑定this的。
原理是利用call/apply改变调用方法的对象。
其中用到Array.prototype.slice把arguments对象转成数组,不知道是谁发现的,知道这个用法就行了。
ps:不止slice,其他像concat,join等也能这样使用。

bindAsEventListener跟bind不同的是会把第一个参数设定为event对象,专门用在事件回调函数中。
其中用到fixEvent处理event的兼容性,后面Event的部分会详细说明。


【Dom】

命名空间是:$$D

这部分是工具库中最大,最复杂也最重要的部分。
主要是储存了一些Dom操作,并解决一般的兼容性问题。

其中getScrollTop和getScrollLeft分别是获取文档滚动的scrollTop和scrollLeft。
一般来说如果在标准模式下应该用documentElement获取,否则用body获取。
但chrome和safari(都是用WebKit渲染引擎)即使在标准模式下也要用body来获取。
这里用的方法是:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjywds.html