• PROTOTYPE使用手记 碧血黄沙


    Try.these(Function…) -> firstOKResult

    接受任意数量的函数(注:即函数引用),返回第一个没有异常抛出的函数返回值。

    这个方法提供了一个简单的方法,用来顺序地尝试执行许多代码块。这样一个尝试队列,通常表现为一个让步函数来获得指定的结果。

    在下面一个来自于Prototype的Ajax库的例子中,我们想要获得XMLHttpRequet对象。然而,IE6或者更早版本,并不提供一个原生的Javascript对象,如果我们尝试去实例化,那么就会抛出一个异常。并且,经过一段时间,这样的私有方法也得到了改进,也就是改变了COM接口的名字。

    Try.these 将顺序地尝试这些方法,从最好的(理论上的,最普遍的)到最陈旧的和最少用的方法,然后返回第一个成功执行的函数的返回值。

    如果没有一个代码块成功,Try.these会返回一个undefined。比如在下面例子中,会造成getTransport方法返回false,如同提供了一个可靠的返回值。

    getTransport: function() {

      return Try.these(

        function() { return new XMLHttpRequest() },

        function() { return new ActiveXObject(‘Msxml2.XMLHTTP’) },

        function() { return new ActiveXObject(‘Microsoft.XMLHTTP’) }

      ) || false;

    }

     

    document.getElementsByClassName(className[, element]) -> [HTMLElement…]

    找到(和提供)所有CSS类名为className的元素。可选的元素参数用来指定其在一个父元素里进行搜索。

     

    注意:每一个返回的元素都已经被扩展了。

    例子

    HTML:

      <body>

        <div id=”one” class=”foo”>Single class name</div>

        <div id=”two” class=”foo bar thud”>Multiple class names</div>

        <ul id=”list”>

          <li id=”item_one” class=”thud”>List item 1</li>

          <li>List item 2</li>

          <li id=”item_two” class=”thud”>List item 3</li>

        </ul>

      </body>

    JavaScript:

      document.getElementsByClassName(‘foo’);

      // 返回 [HTMLElement, HTMLElement] (div#one, div#two)

      document.getElementsByClassName(‘thud’);

      // 返回 [HTMLElement, HTMLElement, HTMLElement] (div#two, li#item_one, li#item_two);

      document.getElementsByClassName(‘thud’, $(‘list’));

      // 返回 [HTMLElement, HTMLElement] (li#item_one, li#item_two)

    $w(String) -> Array

    用所有空格作为定界符,把一个字符串分割成一个数组。等同于Ruby的%w(foo bar或者Perl的qw(foo bar)。(注:当然,也可以理解为是String.prototype.split(’ ‘)的一个封装)

    This is one of those life-savers for people who just hate commas in literal arrays :-)(注:调侃的话,不知道如何翻译妥当:-(

    Examples

    $w(‘apples bananas kiwis’)

    // -> [’apples’, ’bananas’, ’kiwis’]

    它可以在书写简单的迭代器时轻松的缩短代码:

    $w(‘apples bananas kiwis’).each(function(fruit){

      var message = ‘I like ’ + fruit

      // do something with the message

    })

    而且,在集合元素函数时,也会变成一道美味的甜点:

    $w(’ads navbar funkyLinks’).each(Element.hide);

    $R(start, end[, exclusive = false]) -> ObjectRange创建一个新的ObjectRange对象。这个方法是ObjectRange构造器一个方便的封装,但$R是不错的别名

    ObjectRange 实例描绘一个相邻值的排列,无论是数字的,文本的还是任何在语法上支持值排列的。查看类型文档以得到更多的细节,然后找出怎样才能使你自己的对象支持值排列。

    $R函数需要和原构造器一模一样的参数:下限和上限(相同正确类型的值),以及上限是否除外。默认情况下,上限是包含进去的。

    例子

    $R(010).include(10)

    // 返回true

    $A($R(05)).join(‘, ’)

    // 返回 ’0, 1, 2, 3, 4, 5′

    $A($R(‘aa’‘ah’)).join(‘, ’)

    // 返回 ’aa, ab, ac, ad, ae, af, ag, ah’

    $R(010true).include(10)

    // 返回 false

    $R(010true).each(function(value) {

      // 调用了10次相当于value从0到9的循环

    });

    注意,ObjectRange是混合枚举模块的:这会使得它容易把排列转换成一个数组(枚举提供一个toArray方法,它使得$A转换函数直接了当),或者用值去迭代。

    注意

    不过,用start和end属性来获取范围会比调用min()和max()方法来得高效。(注:即$R(0,10).start,$R(0,10).end

    $H([obj]) -> EnumerableHash

    获得一个Hash(等同于映射或联合数组)的唯一方法。返回一个拥有Hash和枚举模块方法的新对象。如果传递一个原对象,那么会在和上述模块混合之前克隆它自身所有的属性。

    $H方法是获得一个Hash唯一正确的方法。

    事实上,Hash是一个模块,它并不是加入Prototype类机制的一个类。使用new Hash()并不会有任何帮助,反而会引起一个构造器错误。

    Hash模块被设计成与混合了枚举模块的对象进行混合,所以$H函数可以保证会提供给你一个混合了上述两者的一个对象。

    你可以调用无参数的$H():这样可以获得一个空Hash(一个只拥有混合模块方法的Hash)。如果你传递给它一个参数,它就会在混合模块之前克隆出传递过去的对象。任何来自对象的属性如果和模块里的方法冲突,那么就会被删除掉。

    当前,有一个未发布的补丁,用于提供安全的Hash。也就是hash可以用任何的键名,除了那些有风险的冲突或者语法限制的名称。本页面之后会有更新。

    $F(element) -> value
    返回一个表单控件的值。它是Form.Element.getValue的一个简短别名。

    这个相对用的多点

     

    新站上线--咱地里 www.zandili.com 科技博客
  • 相关阅读:
    C++多线程同步技巧(三)--- 互斥体
    Windows核心编程笔记之进程
    HTTP协议之分块传输与分段编码
    CVE-2013-2551:Internet Explore VML COALineDashStyleArray 整数溢出漏洞简单调试分析
    SQLServer数据库及注入方法
    Windows核心编程笔记之内核对象
    Windows核心编程笔记之错误处理
    Windows核心编程笔记之处理字符串
    CVE-2012-0774:Adobe Reader TrueType 字体整数溢出漏洞调试分析
    CVE-2012-1876:Internet Exporter MSHTML.DLL CaculateMinMax 堆溢出简单分析
  • 原文地址:https://www.cnblogs.com/airfey/p/1280453.html
Copyright © 2020-2023  润新知