函数式JavaScript编程指南(4)
作者:ShiningRay 来源:无忧脚本 发布时间:2007-12-08 20:39:00
第五课 - 它好在哪里
OK,现在我们已经学习了一些函数式JavaScript的内容。那么它好在哪里?函数式JavaScript编程之所以很重要有三条主要的理由:
它有助于写出模块化和可服用的代码。
它对事件处理程序非常有效。
它很有趣!
在下面的篇幅中,我会给出更多关于前两条理由的信息
1. 模块化和可复用的代码现在你已经知道如何将函数作为值使用,那么你也应该试试!
一个很好的例子是数组内建的sort方法。
预定义的sort()把所有的对象转换成字符串并把他们按照词语的顺序排序。
但如果我们有用户自定义的对象或者数字那么它就不是很有用了。
于是这个函数可以让你给他一个进行比较的函数作为参数,如sort(compareFunction)。
这个方法让我们甚至不用接触实际的sort方法。
例:
var myarray = new Array(6,7,9,1,-1);var sortAsc = function(x,y) { return x-y; };
var sortDesc = function(x,y) { return y-x; };myarray.sort(sortDesc);
alert(myarray);myarray.sort(sortAsc);alert(myarray);
2. 事件处理程序对事件处理程序使用函数式编程也许是最直观的函数作为值得应用了。
既然这样我们马上就演示一个例子。
简单的例子:;ie
现在有一个Button类,带一个自定义的onclick行为。
function Button(clickFunction) { this.button = document.createElement("button"); this.button.appendChild(document.createTextNode("Press me!")); this.button.onclick = clickFunction;}var bt = new Button(function() { alert("42"); });
练习: 为什么我们要把alert包裹在一个匿名函数中?
高级例子:
现在我们想改进我们的Button类。
每一个按钮都被分配了一个值当按钮被点击时显示该值。
首先我们调整我们的类:
function Button(value) { this.value = value; this.button = document.createElement("button"); this.button.appendChild(document.createTextNode("test"));}
下面你也许要尝试写下面的代码:
this.button.onclick = function() { alert(this.value); };
如果你执行它你就会发现提示框中间是空的。
为什么会这样呢?其实原因在于JavaScript的可见性规则。
当onclick函数被执行时this指向的是按钮的DOM节点而非自定义的按钮对象。
我们如何解决这个问题?
使用函数式编程:
this.button.onclick = (function(v) { return function() { alert(v); };}) (this.value);
这种情况下执行该匿名函数会将v绑定到this.value上。
转载地址:
http://www.nirvanastudio.org/wp-content/uploads/2006/04/Functional_JavaScript_Programming.htm


猜你喜欢
- 在本地windows机器开发的Django项目运行正常,放到服务器上后响应超慢,花了一整个工作日没找到原因(非常绝望),又花了一整个周末才找
- Py-Spy介绍引用官方的介绍:Py-Spy是Python程序的抽样分析器。 它允许您可视化查看Python程序在哪些地方花了更多时间,整个
- 表结构:数据:需求:按照company_id不同分组,然后分别求出相同company_id相邻记录touch_time的差值SQL:sele
- Series 的 sort_index(ascending=True) 方法可以对 index 进行排序操作,ascending 参数用于控
- 基于smtplib包制作而成,但在实践中发现一个不知道算不算是smtplib留的一个坑,在网络断开的情况下发送邮件时会抛出一个socket.
- 最近去公司,连续几天被保安查健康码,觉得他们效率有点慢,排了长队,回到家就来兴致,写了个简易的健康码识别系统(主要是针对上海的健康码 随申码
- 前言:当你在MySQL中执行一条SQL时,语句并没有在你预期的时间内执行完成,这时候我们通常会登陆到MySQL数据库上查看是不是出了什么问题
- ES6添加了Promise对象,成功时在then中处理,失败则在catch中处理,但有时候,我们需要在无论成功或失败时都要做一些事,比如隐藏
- 做软件开发时基本都会涉及到数据的使用,比如最简单用户登录注册,这用户信息则需要使用数据库做存储管理。而在项目开发测试过程最常使用的数据库则是
- 以一种有意义的方式组织数据可能是一项挑战。有时你需要的可能是一个简单的排序,但是通常你需要做更多,你需要分组来进行分析和统计。幸运的是,SQ
- 如下所示:daffodil = int(input('请输入一个三位数:'))if daffodil == pow(daff
- 本文实例讲述了Python3实现从文件中读取指定行的方法。分享给大家供大家参考。具体实现方法如下:# Python的标准库linecache
- 英文文档:class type(object)class type(name, bases, dict)With one argument,
- 查看版本号sqlplus / as sysdba>select * from v$version;备份orcl数据库export OR
- 在python 中使用datatime库,可以用来获取现在日期和时间一、datetime库简介datetime有五个类:datetime.d
- 一、日期类型:对于SQL Server 2008 来说(因为2000甚至2005已经稍微有被淘汰的迹象,所以在此不作过多说明,加上自己工作使
- Python工程师面试必备25条Python知识点:1.到底什么是Python?你可以在回答中与其他技术进行对比下面是一些关键点:Pytho
- 本文讲述了python实现的正则表达式功能。分享给大家供大家参考,具体如下:前文:首先,什么叫正则表达式(Regular Expressio
- 前言你有没有经常好奇一些音乐软件的频谱特效是怎么做的,为什么做的这么好看?有没有想试试自己提取音乐频谱并可视化展现出来?今天,咱就结合上次的
- 代码#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : HtmlParser.py#