函数式编程让JS更优美(2)
来源:冷雨幽森 发布时间:2008-06-10 12:40:00
使用函数式概念
前一节介绍了一些使用函数式风格的编程概念。所给的示例并没有包含所有的概念,它们在重要性方面也没有先后顺序,只是一些与这个讨论有关的概念而已。下面对 JavaScript 中的函数式风格作一快速总结:
函数并不总是需要名称。
函数可以像其他值一样分配给变量。
函数表达式可以编写并放在括号中,留待以后应用。
函数可以作为参数传递给其他函数。
这一节将介绍一些有效使用这些概念编写优美的 JavaScript 代码的示例。(使用 JavaScript 函数式风格,可以做许多超出这个讨论范围的事。)
扩展数组排序
先来编写一个排序方法,可以根据数组元素的日期对数据进行排序。用 JavaScript 编写这个方法非常简单。数据对象的排序方法接受一个可选参数,这个可选参数就是比较函数。在这里,需要使用 清单 11 中的比较函数。
比较函数
程序代码 程序代码
function (x,y) {
return x.date – y.date;
}
要得到需要的函数,请使用 清单 12 的示例。
排序函数的扩展
程序代码 程序代码
arr.sort( function (x,y) { return x.date – y.date; } );
其中 arr 是类型数组对象。排序函数会根据 arr 数组中对象的日期对所有对象进行排序。比较函数和它的定义一起被传递给排序函数,以完成排序操作。使用这个函数:
每个 JavaScript 对象都有一个 date 属性。
JavaScript 的数组类型的排序函数接受可选参数,可选参数是用来排序的比较函数。这与 C 库中的 qsort 函数类似。
动态生成 HTML 的优美代码
在这个示例中,将看到如何编写优美的代码,从数组动态地生成 HTML。可以根据从数据中得到的值生成表格。或者,也可以用数组的内容生成排序和未排序的列表。也可以生成垂直或水平的菜单项目。
生成动态 HTML 的普通代码
程序代码 程序代码
var str=' ';
for (var i=0;i<arr.length;i++) {
var element=arr[i];
str+=... HTML generation code...
}
document.write(str);
程序代码 程序代码
生成动态 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 显示了完成此操作的一种方法。
程序代码 程序代码
window.setTimeout(function(){alert(‘First!’);alert(‘Second!’);}, 5000);
调用系列函数的更好的方式
程序代码 程序代码
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 中的代码扩展。这可能是一个需要您自行完成的一个练习,现在您的兴趣被点燃了吧。


猜你喜欢
- 一、为图片添加水印 代码如下:<% Dim Jpeg ””//声明变量 Set Jpeg = Server.CreateObject(
- 记得以前写过一篇文章 php有效的过滤html标签,js代码,css样式标签: <?php $str = preg_replace(
- ul设置浮动后不能自适应高度,也就是不能撑开父容器,不能自适应内容的高度。解决方法是在ul结束标签前加个清除浮动。 &
- 本文实例为大家分享了python实现飞机大战游戏的具体代码,供大家参考,具体内容如下1、准备环境下载python(这里建议不需要安装最新的,
- 在做项目时发现,很多场合都可能用到Input但又想让它具有select的特性,研究了一下,似乎可以实现,下面的代码可以大概说明我的意图,但实
- 大致介绍TypeScript是由C#语言之父Anders Hejlsberg主导开发的一门编程语言,TypeScript本质上是向JavaS
- 1. 规范简介本规范主要规定ASP源程序在书写过程中所应遵循的规则及注意事项。编写该规范的目的是使项目开发人员的源代码书写习惯保持一致。这样
- 一、Python介绍从我开始学习Python时我就决定维护一个经常使用的“窍门”列表。不论何时当我看到一段让我觉得“酷,这样也行!”的代码时
- Python input 等待键盘输入,超时选择默认值,释放input,之后重新进入等待键盘输入状态,直到用户输入可用数据。一、调用 fun
- 本文涉及:Windows操作系统,Python,PyQt5,Qt Designer,PyCharm一、自适应原理 &
- python3的编码问题。打开python开发工具IDLE,新建‘codetest.py'文件,并写代码如下:import sysp
- 1. 环境准备1.1 安装pillow 和 pytesseractpython模块库需要 pillow 和 pytesseract 这两个库
- 对于html中的一些元素注册事件的方式有多种 第一种: <script> function test() { alert(&qu
- CREATETABLE`users`(`id`int(10)NOTNULLAUTO_INCREMENT,`name`char(50)NOTN
- 目录Blazor Server 应用程序中进行 HTTP 请求一、第三方 Web API 概览二、从 Blazor Sever 应用程序开始
- 对于路径中含有中文的图像,直接用cv2.imread读取会报错,上次看到有大佬使用cv2.imdecode就可以正常读取,有点好奇,所以今天
- 功能性的文章直接用几个最简单的实现表达:xlsxwriter库的核心就是其Workbook对象。创建一个指定名字的xlsx文件:import
- 在使用ionic开发IOS系统微信的时候会有一个苦恼的问题,填写表单的时候键盘会挡住输入框,其实并不算什么大问题,只要用户输入一个字就可以立
- 类常量是PHP面向对象程序设计中非常重要的一个概念,牢固掌握类常量有助于进一步提高PHP面向对象程序设计的水平。本文即以实例形式描述了PHP
- 一、前言我想介绍这些功能的主要原因是它们可以帮助您避免编写循环。在某些情况下,循环运行可能会很昂贵,除此之外,这些功能将有助于提高速度。以下