函数式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

标签:JavaScript,编程,函数
0
投稿

猜你喜欢

  • MYSQL中取得最后一条记录

    2010-03-09 16:08:00
  • Ajax学习小贴士

    2007-10-24 23:21:00
  • 从mysql到oracle你必须了解的50件事儿

    2010-08-05 14:36:00
  • JavaScript图片放大镜效果

    2009-10-19 22:15:00
  • 《JavaScript语言精粹》译者序及样章试读

    2009-04-03 11:38:00
  • [翻译]标记语言和样式手册 Chapter 7 锚点

    2008-01-28 14:01:00
  • aspjpeg 半透明描边的实现函数

    2008-12-17 12:02:00
  • 白话Block Formatting Context

    2010-08-03 12:36:00
  • ASP 关于动态数据显示页面得锚点

    2007-11-04 20:28:00
  • 用 SA FileUp 上传多文件

    2008-07-04 13:44:00
  • 我所理解的网页推广设计的几个要点

    2011-01-25 12:37:00
  • asp中获取当前页面的地址与参数的函数代码

    2011-02-20 10:37:00
  • Windows Server 2008之数据安全保护

    2008-12-04 12:49:00
  • 列表模块是否需要标题

    2009-06-25 14:11:00
  • JavaScript大牛:Douglas Crockford

    2009-03-31 12:06:00
  • 老生常谈CSS网页布局的意义与副作用

    2008-09-12 12:31:00
  • 一个ACCESS数据库数据传递的方法

    2008-03-05 11:58:00
  • z-blog文章摘要图文混排

    2009-02-28 13:49:00
  • 如何实现全文检索?

    2010-05-24 18:24:00
  • DD_belatedPNG,解决IE6不支持PNG绝佳方案

    2009-04-27 16:30:00
  • asp之家 网络编程 m.aspxhome.com