计算机软件及应用利用JSJQuery构建JAVAEE前端应用组件

举报
资源描述
—、JavaScript的强大特性 1. JavaScript是现今最流行、应用最广泛的语言之一。 2. JavaScript最强大的特性是其灵活性。你可以采用函数式的编程风格,也可以 采用更复杂的面向对象编程风格。那些较为传统的服务器端编程语言具有的面向对 象特性,JavaScript都有。 例子:开启和停止一段动画 1) 过程式设计方法 function startAnimation(){ } function stopAnimation(){ } 优点?缺点? 2) 面向对象的设计方法 /*Animation Class*/ function Animation (){ } Animation.prototype.start = function(){ }; Animation.prototype.stop = function(){ }; /* usage*/ var myAnim = new Animation(); myAnim.start(); myAnim.stopO; 优点?缺点? 另一种写法: Animation.prototype = { start: function(){ }, stop: function(){ } }; 不同的编码风格在代码篇幅、编码效率和执行性能方面各有特点。 3. JavaScript是弱类型语言 在JavaScript中,定义变量时不必声明其类型,但这并不意味着变量没有类型。 —个变量属于哪种类型,完全取决于它当前所包含的数据,它可以根据所赋的值改 变类型。 JavaScript有三种原始类型:布尔值、数值型、字符串类型。JavaScript不区分 整数与浮点数,他们都属于数值类型。 对象类型和包含可执行代码的函数类型。对象类型是一种复合数据类型,数组是一 种特殊的对象。 空类型(null)和未定义类型(undefined ) o 4. 函数本身即是对象 在JavaScript中,函数本身即是对象,它们可以存储在变量中,可以作为参数传 递给其他函数,也可以作为返回值从其他函数传出,还可以在运行时进行构造。这 些特性为JavaScript带来了极大的灵活性和创造性。 1. 创建匿名函数,赋值给变量 var anonymous = function(){ } 匿名函数最有趣的用途就是用来创建闭包。闭包是一个受保护的变量空间,由内嵌 函数生成。JavaScript具有函数级的作用域。这意味着定义在函数内部的变量在 函数外部是不能被访问的。JavaScript的作用域又是词法性质的。这意味着 函数运行在定义它的作用域中,而不是在调用它的作用域中。把这两个因素结合起 来,就能通过把变量包裹在匿名函数中而对其加以保护。 例子: var baz; (function(){ var a = 1; var b = 2; baz = function(){ return a + b; } })(); baz(); 5. 对象的易变性 在JavaScript中,一切都是对象(除了那三种原始数据类型,布尔型、数值型和 字符串型,但即便是这些类型,在必要的时候,也会被自动包装为对象),而且所 有的对象都是易变的。 这意味着你能使用一些在大多数别的语言中不允许的技术,例如在函数定义之外为 函数添加属性。 /*Class definition*/ function Person(name, age) { this.name = name; this.age = age; } Person.prototype = { getName = function(){ return this.name; }, get Age = function(){ return this.age; } }; /instantiate the class*/ var alice = new Person('Alice', 12); var bill = new Person('BiH', 15); /*Modify the class*/ Person.prototype.getGreeting = function(){ return 'Hi ' + this.getName(); }; /*modify a specific instance*/ alice.displayGreeting = function(){ alert(this.getGreetingO); } 6. 内省(反射) 与对象的易变性相关的还有内省的概念。你可以在运行时检查对象所具有的属性和 方法,还可以使用这种信息动态实例化类和执行其方法,这种技术称为反射,这些 技术在动态脚本编程中发挥着重要的作用。 在其他很多语言中,你不能对已经实例化的对象进行扩展,你也不能修改已经定义 好的类,但是在JavaScript中,任何东西都可以在运行时修改。这有非常强的灵 活性。但是也有其弊端,比如你定义好具有一套方法的类之后,你确不能保证这些 方法在以后总是完好如初的。这也是JavaScript很少进行类型检查的原因之一。 7. 继承 继承在JavaScript中,不像在别的面向对象的语言中那样简单,比如采用extend 关键字。JavaScript中使用的是基于对象的继承,prototype继承。它可以用来 模仿基于类式的继承。在开发中,到底是使用类式继承还是原型式继承,要根据实 际情况来选择,它们在性能上也有不同的表现。 8. JavaScript的设计模式 在JavaScript中使用设计模式主要有如下原因 1)可维护性。设计模式有助于降低模块之间的耦合。这使得对代码进行重构和换 用不同的模块变得更容易。 2 )沟通。设计模式为处理不同的对象提供了一套通用的术语。程序员因此可以更 加简明的描述自己系统的工作方式。 3)性能。某些模式可以起到优化性能的作用,它可以大幅度提高代码的运行速 度,并减少需要传送到客户端的代码量。 当然,你也可以基于以下两个理由而不是用设计模式 1)复杂性。获得可维护的代码往往要付出代价,那就是代码会变得更加复杂,更 难被程序设计新手理解。 2 )性能。尽管某些性能可以得到提升,但多数模式对代码的性能都会有所拖累。 这种拖累可能微不足道,也可能完全不能接受。 二、JavaScript 的接口 接口是面向对象JavaScript中最有用的工具之一。面向对象设计最重要的原则之 —就是:针对接口而不是实现编程。 问题在于,JavaScript没有内置的创建或者实现接口的方法,它也没有内置的方 法可以用于判断一个对象是否实现了与另一个对象相同的一套方法。这使得对象之 间的互换非常困难。 好在JavaScript是非常灵活的语言,因此添加这些特性并非难事。 1. 什么是接口 ? 接口提供了一种用以说明一个对象应该具有哪些方法的手段。尽管它可以表明或者 暗示这些方法的语义,但是他并不规定这些方法如何实现。 有了这个工具,你就可以按对象可以提供的特性对他们进行分组。你还可以使用接 口开发不同类之间的共性。 在JavaScript中,接口使用的最大问题在于,你无法强迫其他程序员遵守你定义 的接口。在其他编程语言中,如果一个类实现了某个接口,那么编译器会确保该类 实现了这个接口。但是在JavaScript中,你必须手工来保证一个类实现了某个接 口。接口会对性能造成影响,因为任何方法的调用都需要开销,当你对某个对象检 查是否实现了相应的接口时,就会产生额外的开销。当然,这类代码可以用在开发 的时候做类型检查。而在运行环境中,保证接口检查的代码不加以执行。 2. JavaScript 的接口 JavaScript以对象实现的方法集作为该对象是否属于某个类的实例的唯一标准。 如果对象具有与接口定义的方法同名的所有方法,那么就可以认为它实现了这个接 口。 var Composite = new Interface('Composite', ['add', 'remove', 'getChild']); var FormItem = new Interface('FormItem', ['save']); var CompositeForm = function(id, method, action){ }; function addForm(formInstance){ ensurelmplements(formlnstance, Composite, FormItem); } 3. Interface 类 //Interface constructor function Interface(name, methods){ if (arguments.length != 2) { throw new Error("); } this.name = name; this.methods =[]; for (var i = 0, len = methods.length; i< len; i + +) { if (typeof methods[i] ! = = 'string') { throw new Error("); } this.methods.push(methods[i]); } } //static class method Interface.ensurelmplements = function(object){ if(argument.length <2) { throw new Error("); } for (var i = 1, len = arguments.length; i < len; i + +) { var interface = arguments[i]; if (interface.constructor ! = = Interface) ( throw new Error ("); } for (var j = 0, methodLen = interface.methods.length; j < methodLen; j++){ var method = interface.methods[j]; if (!object[method] || typeof object[method] ! = = 'function') { throw new Error("); } } } ) 接口的运用在设计实现复杂的系统时最能体现其价值。它看似降低了 JavaScript 的灵活性,实际上,接口的使用降低了对象之间的耦合程度。 三、JavaScript的封装、信息隐藏 1. 什么是封装 Encapsulation ? A language mechanism for restricting access to some of the object's components. 为对象创建私用成员是任何面向对象语言中最基本的和最有用的特性之一。通过将 —个方法或者属性设置为私有的,可以让对象的实现细节对其他对象保密以降低对 象之间的耦合程度,也可以保证数据的完整性并对修改方式加以约束。 尽管JavaScr
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号