Prototype Utilities – $A $w $H $R
这四个方法是Prototype库中提供的非常实用的工具方法。简单的来说明一下它们的适用范围。
$A是把一个可迭代的的类数组转换成数组的形式,说是转换,实际上是把该对象拷贝到一个临时数组中,并返回该数组。
$w是创建数组对象的快捷方式,只接收一个空格分隔的字符串参数,内部调用split方法处理字符串,返回数组。
$H将JS原生对象转换成Hash对象,JS对象本身就是一个类似于Hash键/值对的容器。
$R创建一个ObjectRange对象,该对象是Prototype扩展的对象,类似于Ruby的Range类。
Prototype使用这个方法对js进行扩展,在其上添加了许多有用的方法。个人感觉Prototype库很多东西都是从Ruby那里学习过来的,基于JS语言本身的灵活性,这样扩展起来的确很有效果。下面看一下这几个函数该如何使用。
$A会把数组和类数组都转换成数组,Prototype对原生的Array对象进行了扩展,所以这样转换之后会有更多的方法可供使用,似乎比较方便。
document.getElementsByTagName('p'),这会返回一个页面中所有p元素组成的NodeList对象,该对象属于可迭代的对象之列,所以可以使用$A方法将它转换成数组。
var toString = Object.prototype.toString;
var paras = document.getElementsByTagName('p');
toString.call(paras); // "[object NodeList]"
toString.call($A(paras)); // "[object Array]"
如果使用Prototype的$$选择器方法取得所有的p元素,那么默认会把NodeList对象转换成Array对象。
$w没有什么高深莫测的,只是把字符串转换成一个数组的形式。这么封装大概为了方便多次调用。
$w('jquery prototype yui mootools');
// ["jquery", "prototype", "yui", "mootools"]
$H官方语法, $H([obj]) → Hash,是对Hash对象的引用。JS自身的实现是类似于Hash这种形式的,忘记了从哪里看过的一句话,在JS中,就是键/值构成的容器、集合。不过这种原生的形式没有提供太多的原生方法供使用,所以,只好依赖框架来对其进行扩展了。
var me = $H({"name": "alien",
"sex": "man",
"lang": ["ruby", "javascript"]
});
me.get('lang');
// ["ruby", "javascript"]
$R是对ObjectRange对象的引用,该对象也具有可迭代性,常用的each方法也能在该对象身上使用。
$R(1, 20).each(function(value, index) {
// execute 20 times
});
$A($R('a', 'e')) // 可以很容易地将其转换成Array对象
总之,借助这几个扩展的方法,可以很方便地对类数组,对象等进行操作。暂时能够理解的就只有这些,这几个对象所扩展的方法还是需要查手册或官方文档获取。
现在还没有评论