预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

灵活的js语言可以轻易的就完成截然相反的两种编程模式–函数型程序设计和面向对象的程序设计。 js原生的支持将函数当做变量来处理。你可以将一个函数赋值给一个变量,然后把他传给其他的变量。抽象的说,我们可以认为js的函数是一个特殊的变量:只不过他的形式是“函数”。 js原生的也提供对象。在js中,对象可以认为是一系列平面化的属性值和方法。他们看起来像是一个数据字典,而不像你在其他诸如java、c++、c#中看到的对象那样。在经典的面向对象编程中,类表示可以通过new操作符来生成一个实例的模板。但是在js中,没有可以当做蓝本来生成对象的。在js中,一个对象的蓝本更像是一个数据字典。所以在js中,你可以创建对象,然后可以在对象中存储数据。当然,js的对象也提供一定程度的面向对象的特性,比如封装和继承。 js开发越来越热,两种模式的优劣是什么?js对两种模式都支持,但是问题的答案得你自己来弄清楚。它两种都支持,但并不是某一种特别的合适。OOP的js框架和函数型的js都同时存在。 函数型程序设计简介 函数型程序设计中,每个代码段都是在”function”之上建立的,这与传统的OOP建立在”class”之上是不同的。一个函数只是对输入的展现的一种操作。一个函数只是接收一些输入,然后返回一些输出,其他的都是隐藏起来的。 在函数型程序设计中,你通过在一个函数中调用其他的函数来完成程序的输入与输出。这通常都没有可以处理输入、存储数据以及一系列的状态更新的那一层。函数就像一个数值一样,可以作为参数传递给其他函数。 javascript与函数型程序设计 需要明确的一个事实是:js并不是像F#那样真正的函数型程序设计语言,虽然他有一些函数型程序设计模式的特性。利用这些特性,你也可以用js做很好的工作。到今天为止,使用jQuery就是这种模式最广泛的应用了。 匿名函数是函数型程序设计的精华之所在。匿名函数是lambda计算式的另一种形式,一种可以适配经流行的编码风格。 1 2 3 function(x,y){ returnx+y; }普通函数和匿名的函数的唯一区别就在于名字。在函数的上下文中,当你只是需要函数的返回值作为参数来使用的时候,并不是非得要给他一个函数名。通过下面这个例子我们来看看: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //一个用来计算和的函数 varCalcTotal=function(x,y){ returnx+y; }; //增加税率 varAddTaxes=function(x){ returnx*1.2; }; //最终的计算函数 varCalcTotalPlusTaxes=function(fnCalcTotal,fnAddTaxes,x,y){ returnfnAddTaxes(fnCalcTotal(x,y)); }; //执行 varresult=CalcTotalPlusTaxes(CalcTotal,AddTaxes,40,60); alert(result);需要注意的是,你也可以使用匿名函数,而不是非得通过一个中间变量来传递给最终的计算式。 1 2 3 alert( (function(x){returnx*1.2})(100); );将匿名函数看做一个变量,可以很轻松的将数据和特性合并在一起。这也给你了一个机会去试验一些其他的设计原则。当高一级的模块(无论对象还是函数)需要低一级的模块提供的返回值的时候,就可以将低一级的模块直接当做参数传过去。很多情况下,这会提高函数参数的可读性,并且让代码更优雅一些,当然,也会让你在处理复杂事物的时候更加得心应手。 jQuery和函数型程序设计 jQuery在函数型程序设计方面吸引了人们极大的关注。整个jQuery库都是基于jquery对象或者说$。$是DOM元素的一个封装,DOM元素也可以通过$()表达式传递进去。另外,jQuery支持链式操作,每一个函数运行之后都会返回同一个jquery对象。 jQuery非常高效,因为你可以在主要工作是操作DOM元素的WEB编程环境下最大限度的发挥出函数型程序设计的威力。你也许是jQuery的粉丝,并且觉得这种函数式的操作非常赞。但是,这不是需要完全把这种编程模式到处使用的理由。我们通过下面这个jQuery源码来看个例子: 1 2 3 4 5 6 7 8 jQuery.fn=jQuery.prototype={ init:function(selector,context){...}, size:function(){returnthis.length;}, each:function(callback,args){ returnjQuery.each(this,callback,a