在程序开发的过程中有时会遇到这样的情况:在若干个函数中,开发人员不能确定哪一个会返回正确的结果,只能依次尝试。Prototype 中 Try.these()函数为开发人员提供了一个很简便的方式来解决类似的问题。

Try.these()函数的定义

  1.   
  2. var Try = { 
  3.   these: function() { 
  4.     var returnValue; 
  5.     for (var i = 0, length = arguments.length; i < length; i++) { 
  6.       var lambda = arguments[i]; 
  7.       try { 
  8.         returnValue = lambda(); 
  9.         break
  10.       } catch (e) { } 
  11.     } 
  12.     return returnValue; 
  13.   } 
  14. }; 

从上面代码中可以看到,Try.these()函数的每一个参数都必须是一个无参数的JavaScript方法。在 Prototype框架中,实现 Ajax 对象的getTransport方法就用到了 Try.these() 函数,getTransport 方法的作用是返回一个 XMLHttpRequest对象,而在不同浏览器中创建XMLHttpRequest 对象的方式是不同的。通过Try.these()函数可以依次尝试各种浏览器创建XMLHttpRequest对象的方法,直到成功为止。

我们来看看Ajax对象的getTransport方法的实现代码:

 

  1.   
  2. var Ajax = { 
  3.   getTransport: function() { 
  4.     return Try.these( 
  5.       function() {return new XMLHttpRequest()}, 
  6.       function() {return new ActiveXObject('Msxml2.XMLHTTP')}, 
  7.       function() {return new ActiveXObject('Microsoft.XMLHTTP')} 
  8.     ) || false
  9.   }, 
  10.   activeRequestCount: 0 
  11. };