Try.these
Try.these(Function...) -> firstOKResult
接收任意数目的函数作为参数,返回第一个执行成功的函数(未抛出异常的函数)的结果。
该函数提供一种简单的风格:按照一定的顺序尝试执行一组函数。这组函数的执行顺序通常依照某个给定的特性, 根据函数和特性的相符程度由高到低进行排列(译注:类似于“职责链[chain of responsibility]”模式)。
在 Prototype Ajax 一节的样例中,我们想要获取一个
XMLHttpRequest
对象,然而,在 IE6 及其早期版本中,并没有提供内置的 XMLHttpRequest
Javascript 对象,如果我们试图实例化该对象,将会抛出一个异常。并且,随着时间的推移,各个版本的 IE
创建该对象的方式也随之变化,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;
}