`
未雨绸缪
  • 浏览: 215717 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

javascript设计模式

阅读更多
第一章  神奇的JavaScript

      JavaScript是近年来一个非常流行并被广泛应用的语言。因为它被几乎所有的浏览器所支持,因此也得到了广泛的推广。作为一种语言,它在我们的生活变得难以相信的重要,帮助我们增强web的功能,创建丰富的用户界面。
为什么仍然有一些人认为它是一种“玩具式”的语言,认为它不适合于专业的程序员。我认为这是因为他们没有认识到它的真正的强大之处和它相比其它各种编程语言的独特性。JavaScript是一门非常神奇高深的语言,拥有一些C家族类语言所没有的特性。
本章我们将探讨是哪些特性使JavaScript如此的神奇高深。我们将看到JavaScript使你可以用多种不同的方式来完成同一件事情,以及如何通过函数式程序设计的方式来模拟实现面向对象程序设计。我们将讨论为什么你应该把设计模式放在首页以及如何使用它来使你的代码更有效,工作更简单。

灵活的JavaScript
      JavaScript 的一个很重要的特性就是其灵活性。作为JavaScript程序员,你可以使你的程序很简单或很复杂。JavaScript允许你使用各种不同的编程风格。你可以使用函数式风格或者接近于面向对象的编程风格来编写你的代码,同样你可以在不了解函数式或面向对象编程的情形下书写相对复杂的程序,你也可以通过写一些简单的函数来使用它。或者这些也是一些人把JavaScript看做“玩具”语言的一个原因,但我们应该认为这些是一些优秀的特性。它可以使程序员只掌握小部分易学的语言子集来完成一些有用的功能,同样它也意味着当你成为一个更加高级的程序员时JavaScript会在你手中发挥更大的能力。
      JavaScript允许你去模拟其他语言中的模式和思想。此外它自身还包含一些独有的特性。它提供了和传统服务端语言完全一样的面向对象特性。
      我们来看一下通过几个不同的代码组织方式来完成同样的一件任务:启动和停止一个动画。如果你不理解这些例子也无所谓,我们这里使用的所有模式和技术都会在本书中讲到。现在,你可以把这一节做为JavaScript可以通过不同的方式来完成同一件任务的一个实际的例子。
      如果你以前是一个面向过程的程序员,你可以会像下面这样做:
/* Start and stop animations using functions. */
function startAnimation() {

}
function stopAnimation() {

}


      这种方法非常简单,但它没有创建一个动画的对象来使你可以保存状态并拥有一些只作用于其内部状态的方法。下面这段代码定义了一个类使你可以创建这样的一个对象:
/* Anim class. */
var Anim = function() {

};
Anim.prototype.start = function() {

};
Anim.prototype.stop = function() {

};
/* Usage. */
var myAnim = new Anim();
myAnim.start();

myAnim.stop();

      这里定义了一个叫做Anim的类并为该类的prototype属性增加了两个方法。我们在第三章将详细讨论这种技术。如果你喜欢创建一个只有一个声明的类,你可能会写出如下的代码:
/* Anim class, with a slightly different syntax for declaring methods. */
var Anim = function() { 

};
Anim.prototype = {
start: function() {

},

stop: function() {

}
};


      这看起来有点类似于经典的面向对象编程风格:将函数声明嵌套在一个类声明之内。如果你之前使用过这种风格,你可以试一下下面这个例子,如果不太理解下面的部分代码也不要担心:
/* Add a method to the Function object that can be used to declare methods. */
Function.prototype.method = function(name, fn) {
    this.prototype[name] = fn;
};
/* Anim class, with methods created using a convenience method. */
var Anim = function() { 

};
Anim.method('start', function() {

});
Anim.method('stop', function() {

});

      Function.prototype.method使你可以为类增加新的方法。它可以接收两个参数:第一个是作为新方法的名字的字符串,第二个是为这个方法名指定的一个函数。
你可以通过对Function.prototype.method稍作修改以使其可以进行链式调用。为此,你只需要在创建完每个方法时返回一个this即可。我们在第6章将讨论链:
/* This version allows the calls to be chained. */
Function.prototype.method = function(name, fn) {
    this.prototype[name] = fn;
    return this;
};
/* Anim class, with methods created using a convenience method and chaining. */
var Anim = function() { 

};
Anim.
method('start', function() {

}).
method('stop', function() {

});

      你刚刚看到了我们使用五种略微不同的方式来完成了同样一件任务。根据你的编程背景,你可能觉得某种方式比其他一种更好。这其实很好,JavaScript允许你使用最适合你们手中项目的编程方式。每种方式拥有不同的特点和不同代码量,效率和性能。我们在本书的第一部分涵盖了所有的这些编程方式。

一种弱类型的语言
      在JavaScript中,在定义变量时不需要定义类型,但是这并不意味着它没有变量类型。一个变量可以保存多种数据类型的数据,其类型取决所赋予给它的数据。JS有三种基本的数据类型:布尔型、数字型和字符串型(JavaScript不同于其他的编程语言,它将整型和浮点型作为同一种类型),此外,它含有可执行代码的function(函数)类型,还有包含复合类型的对象(Object)类型(Array是一种特殊的对象,它包含一些有序的数据集合)。现在,它还有null和undefiend数据类型。基本数据类型按值传递,其它的数据类型是按照引用传递,因此如果你不小心就可能导致一些意外的问题。
      和其它弱类型语言一样,变量会根据被赋予的值改变其数据类型。基本数据类型之间可以互相转换,toString方法可以将一个数字或布尔型数据转换为一个字符串。 parseFloat和floatInt函数可以将字符串转换为数字型,双否定号可以将一个字符串或数字数据转换成布尔类型。
      var bool = !!num;
      弱类型的变量提供了很多了灵活性,你不需要担心数据类型错误,因为在需要的时候JavaScript会自动做转换。

函数是第一型对象
      在 JavaScript语言中,函数是第一性的对象。它可以被存储在一个变量中,作为参数传入到函数中,被函数作为返回值返回,或者在运行的时间动态构造。这些特性使你在使用函数增加了很大的灵活性和表现能力。在本书后面的部分你会看到,这些特性是你构建一个传统的面向对象框架的基础。
      你可以使用functiuon(){…}方法创建一个匿名的函数。它没有函数名但可以被赋给一个变量。下面是一个匿名函数的例子:
/* An anonymous function, executed immediately. */
(function() {
    var foo = 10;
    var bar = 2;
    alert(foo * bar);
})();

      这个函数在定义和执行时没有赋给任何变量。最后的一对括号会使该函数立即执行。但并一定只能这样写:
/* An anonymous function with arguments. */
(function(foo, bar) {
    alert(foo * bar);
})(10, 2);

      这个匿名函数和第一个基本相同,但这个函数没有使用var在内部定义变量,而是作为参数传入了函数,这个函数可以有一个返回值并可以被赋予给一个变量。
/* An anonymous function that returns avalue. */
var baz = (function(foo, bar) {
    return foo * bar;
})(10, 2);
// baz will equal 20.

      匿名函数的一个最有趣的功能就是创建闭包。闭包就是通过使用嵌套函数,创建一个保护变量空间。JavaScript有函数级的作用域,也就是说在函数中定义的变量不能被外部访问。它还有语法上作用域,也就是函数运行在他们定义的作用域而不是他们执行时的作用域。这两者相结合使你可以通过匿名函数创建一个保护变量。你可以使用这点为类创建私有变量。
/* An anonymous function used as aclosure. */
var baz;
(function() {
    var foo = 10;
    var bar = 2;
    baz = function() { 
    return foo * bar; 
};
})();
baz(); // baz can access foo and bar, even though it is executed outside of the
// anonymous function.

      变量foo和bar只在匿名函数中定义,因为baz函数也定义在这个闭包中,因此它可以访问这两个变量,甚至在闭包函数执行结束之后。这是我们整本书都会一直接触的一个复杂逻辑。我们在第三章讨论封装的时候将详细讲解这种技术。
分享到:
评论

相关推荐

    JavaScript设计模式与开发实践.pdf

    "JavaScript设计模式与开发实践.pdf" 本书《JavaScript设计模式与开发实践》是JavaScript语言的设计模式和开发实践的指南,旨在帮助初、中、高级Web前端开发人员和想往架构师晋级的中高级程序员,掌握JavaScript...

    JavaScript 设计模式(高清扫描版本)- 张容铭

    JavaScript设计模式是由张容铭编著的一本关于JavaScript编程领域的重要参考书籍,主要探讨了如何在JavaScript编程中应用设计模式来提升代码质量和可维护性。设计模式是软件工程中的最佳实践,它们是针对常见问题的...

    JavaScript设计模式.pdf

    JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    1. **JavaScript设计模式**: 设计模式是软件工程中经过实践验证的、解决常见问题的有效方法。在JavaScript中,常见的设计模式包括: - 单例模式:确保一个类只有一个实例,并提供全局访问点。 - 工厂模式:创建...

    JavaScript 设计模式 azw3

    《JavaScript设计模式》是JavaScript设计模式的学习指南。全书分为14章。首先介绍了什么是模式、模式的结构、类别、模式的分类、如何编写模式等等;然后,集中介绍了很多流行的设计模式在JavaScript中的应用,包括...

    学用JavaScript设计模式

    书中不仅介绍了JavaScript中经典和现代的设计模式,还包括了针对不同JavaScript开发框架(如MVC、MVP、MVVM)的设计模式,以及最新的模块化JavaScript设计模式(AMD、CommonJS、ES Harmony)和jQuery中的设计模式。...

    JAVASCRIPT设计模式[收集].pdf

    JavaScript 设计模式概述 JavaScript 设计模式是一个非常重要的概念,在前端开发中,掌握设计模式可以提高开发效率和代码质量。本文将对 JavaScript 设计模式进行总体介绍,并对闭包、封装等重要概念进行详细讲解。...

    Javascript 设计模式 电子书

    因此,通过学习JavaScript设计模式,Web开发人员能够更好地组织代码,写出更加健壮且易于维护的JavaScript应用程序。 《Javascript 设计模式》电子书深入讲解了JavaScript开发原理以及在客户端脚本开发中的设计模式...

    javascript DOM高级程序设计 及 javascript 设计模式

    在吃透了前面所说的书之后,接下来两本书的顺序已经无关紧要了,《JavaScript DOM高级程序设计》(注意和《JavaScript 高级程序设计》相区别)和《JavaScript设计模式》,这两本都是重量级的书,能让你的JS技术上一...

    javascript 设计模式

    JavaScript设计模式是编程实践中一种重要的思想,它通过总结和提炼出一套可复用的解决方案,帮助开发者解决在软件开发过程中遇到的常见问题。设计模式并不是特定的语言特性,而是跨越多种编程语言的一般性原则和最佳...

    外文翻译:学用JavaScript设计模式

    ### 外文翻译:学用JavaScript设计模式 #### 序言与重要性 设计模式作为软件工程中的一个重要组成部分,其核心在于提供了一套标准的方法论,帮助开发人员以优雅、高效的方式解决常见的软件设计问题。《学用...

    Javascript设计模式源码

    《JavaScript设计模式》中,Google和Yahoo公司的两位资深Web专家对此给出了掷地有声的肯定回答。作者针对常见的开发任务,从YUI等实战代码中取材,提供了专家级的解决方案,不仅透彻剖析了JavaScript扣的面向对象...

    Javascript 设计模式 很经典 第一本

    ### JavaScript设计模式经典知识点概述 #### 一、书籍简介与背景 《Pro JavaScript Design Patterns》是一本关于JavaScript设计模式的经典著作,由Ross Harmes和Dustin Diaz共同编写,并于2008年出版。该书深入浅出...

    精通javascript设计模式en版pdf

    **JavaScript设计模式:深入理解与应用** 在编程领域,设计模式是解决常见问题的经验总结,它们代表了软件设计的最佳实践。对于JavaScript这种广泛应用于Web开发的动态语言来说,设计模式同样至关重要。《精通...

    JavaScript设计模式Demo

    JavaScript设计模式是编程实践中的一种重要概念,它是为了在JavaScript环境中编写更加高效、可维护和可扩展的代码而形成的一套通用解决方案。这个"JavaScript设计模式Demo"可能包含了各种常见的设计模式示例,如单例...

    学用 JavaScript 设计模式.pdf

    外文翻译:学用JavaScript设计模式,pdf版本,中文版 设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。 其中一个原因是它可以让我们站在巨人...

    Javascript 设计模式系统讲解与应用视频资源地址.7z

    JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...

    javascript 面向对象编程.pdf javascript 设计模式与开发实践.pdf

    面向对象编程(Object-Oriented Programming, OOP)是JavaScript中的核心概念,而设计模式则是解决常见编程问题的经验总结,对于提升代码质量和可维护性至关重要。这两本书——"JavaScript 面向对象编程.pdf"和...

    JavaScript设计模式中的单例模式和观察者模式.docx

    ### JavaScript设计模式详解:单例模式与观察者模式 #### 一、单例模式 **定义**:单例模式是一种常用的软件设计模式,其目的是确保某个类只有一个实例,并且能够提供一个全局访问点来访问该实例。在JavaScript中...

Global site tag (gtag.js) - Google Analytics