在程序开发的过程中有时会遇到这样的情况:在若干个函数中,开发人员不能确定哪一个会返回正确的结果,只能依次尝试。Prototype 中 Try.these()函数为开发人员提供了一个很简便的方式来解决类似的问题。
Try.these()函数的定义:
- var Try = {
- these: function() {
- var returnValue;
- for (var i = 0, length = arguments.length; i < length; i++) {
- var lambda = arguments[i];
- try {
- returnValue = lambda();
- break;
- } catch (e) { }
- }
- return returnValue;
- }
- };
从上面代码中可以看到,Try.these()函数的每一个参数都必须是一个无参数的JavaScript方法。在 Prototype框架中,实现 Ajax 对象的getTransport方法就用到了 Try.these() 函数,getTransport 方法的作用是返回一个 XMLHttpRequest对象,而在不同浏览器中创建XMLHttpRequest 对象的方式是不同的。通过Try.these()函数可以依次尝试各种浏览器创建XMLHttpRequest对象的方法,直到成功为止。
我们来看看Ajax对象的getTransport方法的实现代码:
- var Ajax = {
- getTransport: function() {
- return Try.these(
- function() {return new XMLHttpRequest()},
- function() {return new ActiveXObject('Msxml2.XMLHTTP')},
- function() {return new ActiveXObject('Microsoft.XMLHTTP')}
- ) || false;
- },
- activeRequestCount: 0
- };