清单 13 中的代码风格通常被用来从数组生成动态 HTML。
清单 13. 生成动态 HTML 的普通代码
- var str=' ';
- for (var i=0;i<arr.length;i++) {
- var element=arr[i];
- str+=... HTML generation code...
- }
- document.write(str);
可以用 清单 14 的代码替换这个代码。
清单 14. 生成动态 HTML 的通用方式
- Array.prototype.fold=function(templateFn) {
- var len=this.length;
- var str=' ';
- for (var i=0 ; i<len ; i++)
- str+=templateFn(this[i]);
- return str;
- }
- function templateInstance(element) {
- return ... HTML generation code ...
- }
- document.write(arr.fold(templateInstance));
我使用 Array 类型的 prototype 属性定义新函数 fold。现在可以在后面定义的任何数组中使用该函数。
系列函数的应用
考虑以下这种情况:想用一组函数作为回调函数。为实现这一目的,将使用 window.setTimeout 函数,该函数有两个参数。第一个参数是在第二个参数表示的毫秒数之后被调用的函数。清单 15 显示了完成此操作的一种方法。
清单 15. 在回调中调用一组函数
- window.setTimeout(function(){alert(‘First!’);alert(‘Second!’);}, 5000);
清单 16 显示了完成此操作的更好的方式。
清单 16. 调用系列函数的更好的方式
- Function.prototype.sequence=function(g) {
- var f=this;
- return function() {
- f();g();
- }
- };
- function alertFrst() { alert(‘First!’); }
- function alertSec() { alert(‘Second!’); }
- setTimeout( alertFrst.sequence(alertSec), 5000);
在处理事件时,如果想在调用完一个回调之后再调用一个回调,也可以使用 清单 16 中的代码扩展。这可能是一个需要您自行完成的一个练习,现在您的兴趣被点燃了吧。
结束语
在许多领域中都可以应用 JavaScript 中的函数式编程,以优美的方式完成日常活动。这篇文章中的示例只介绍了几种情况。如果您找到了函数式编程的合适场景,并应用这些概念,那么您就会有更多的理解,并且可以增加您的优美程度。