理解prototype掌握基本函数

    Prototype 主要包括三个内容:一是提供了一些全局性的函数,替代原先烦琐重复的代码;二是对现有 Javascript 、 DOM 对象的扩展,提供访问公共函数的捷径;三是对 Ajax 应用的封装,使得开发 Ajax 应用更加容易和快速。
全局性函数:$系列函数Try.these()函数


     $()函数是用于替代Dom中频繁使用的document.getElementById()的,返回其传入参数所指定id指向的元素。它允许传入多个id作为参数然后返回一个其id指向元素的Array对象。其实$()也可以通过元素的name去获得其指向元素。

    可以传元素Id也可以传元素本身(即通过Id获得后的该元素对象)。

function foo(element){
 element=$(element);}
$('itemId').hide(); =====Element.hide('itemId');
$('item1','item2','item3'].invoke('hide');
======['item1','item2','item3'].each(Element.hide);

 

    $F()函数用于返回任何表单(form)输入控件的值,如文本框、文本域、下拉列表,它以元素本身作为参数,但该id必须支持value属性,否则就得不到值了,像按钮。这是Form.Element.getValue的一个方便的别名 。它可以通过id属性获得值,也可以通过name属性去获取。但如果有两个相同的name或id属性只能取到第一个结果值,否则返回null。还有情况页面中如果有一个name和id的属性名相同,则$F将取到在前面的那个元素的值,而不区分是id还是name

$F('itemId')===document.getElementById('itemId').value;

 

    $A()函数将其接受到的与数组类似的集合(如:NodeList,HTMLCollection)转化为一个真正的Array对象,如将

string字符串转化为Array数组=====Array.form
   例:document.getElementsByTagName不返回数组,而NodeList对象实现了基本的数组“接口”,我们把返回的NodeList转换成数组:

var params=$A(document.getElementsByTagName('p'));
    params.each(Element.hide);//确保目标元素已经被扩展,必须用
    $(params.last()).show();
=====$A(document.getElementsByTagName('p')).map
(Element.extend).invoke('hide');

   这里将隐藏所有<p>标签里的内容,而放过最后一个<p>,显示其中内容。 

 所有Array都有一个join方法,但所有函数里的所有参数值并没有继承于Array,可以比较以下两种输出方式$A()较简单易用---输出参数:

alert(Array.prototype.join.call(params,', '));======alert($A(params).join(', '));

  $H()函数是唯一一个得到哈希表的办法,类似一个可枚举的和联合数组类似的Hash对象,带上了Hash和Enumerable模块的所有特征。Hash是一个模块,而不是一个类。在Prototype的类机制里,执行new Hash()是没有用的;它将会引起一个”Hash不是一个构造器“的错误。

   $R()函数是new ObjectRange(start,end,exclusive=false)的缩写和替代,参数表示:最小和最大范围(同一类型),以及最大范围是否包括(默认false包括)。
如:

    $R(0,10).include(10)----->true
    $A($R(0,5)).join(', ')------>'0,1,2,3,4,5'
    $R(0,10,true).include(10)------>false

 
   Try.these(Function...) -> firstOKResult
接收任意数量的函数,返回最前面一个没有异常的函数的返回值。替代了if/else去判断的方式。
如果没有一个模块是成功执行的,Try.these在这时会导致getTransport方法返回false,这个值当成是失败的返回值

(undefined)。如:实例化浏览器对象XMLHttpRequest对象

getTransport: function() {
    return Try.these(
         function() { return new XMLHttpRequest() },
         function() { return new ActiveXObject('Msxml2.XMLHTTP')  },
         function() { return new ActiveXObject('Microsoft.XMLHTTP') }
  ) || false ;
} 

 这段代码就比较实用,比我们写if/else语句要方便的多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值