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对象
  

总之,借助这几个扩展的方法,可以很方便地对类数组,对象等进行操作。暂时能够理解的就只有这些,这几个对象所扩展的方法还是需要查手册或官方文档获取。

现在还没有评论

留下您的大名