[size=large]二、 构造模式[/size]
利用prototype 来构造自己的函数。

function Car(model,year,miles){  this.model = model;  this.year = year;    this.miles = miles;}Car.prototype.toString = function(){    return this.model + " has done " + this.miles + " miles";};var civic = new Car("Honda Civic",2009,20000);var mondeo = new Car("Ford Mondeo",2010,5000);

console.log(civic.toString());

结果:

Honda Civic has done 20000 miles

一个简单的toString()方法将在所有的Car 对象之间共用。
善用构造函数,用来简单的区分它们与其他的函数

[size=large]三、 单体模式[/size]
在传统的软件工程中,通过创建有一个方法的类来创建类的实例,实现单体模式。使用JavaScript,单体作为一个命名空间提供与全局命名空间隔离的实现代码,从而提供一个功能单一的访问点。
在JS中最简单的一种形式就是——一个对象直接量与它相关的方法和属性。如下:

var mySingeton = {  prototype1: "something",    prototype2: "something else",   method1: function(){      console.log('hello world'); }}

如果你想进一步的扩展,你可以通过封闭变量和函数增加自己的私有成员和方法。只暴露那些你想公有的部分。例如:

var mySingleton = function(){   /**    * here are my private variables and method    * */ var privateVariable = "something private"; function showPrivate(){       console.log(privateVariable); } /**    * public variables and methods (which can access private variables and methods)   * */ return {      publicMethod: function(){         showPrivate();        },        publicVar:"the public can see this!"    }}var single = mySingleton();single.publicMethod();console.log(single.publicVar);

结果:

something privatethe public can see this!

上面的代码不错了。但是让我们进一步来考虑,如果你只想在当它需要的时候才实例化它这种情况。为了节约资源,你可以把实例化的代码放在另外一个构造函数中,如下:

var Singleton = (function(){    var instantiated;    function init(){   /*singleton code here*/        return{      publicMethod: function(){         console.log('hello world')                  },            publicProperty:'test'   }    }    return {        getInstance: function(){      if(!instantiated){            instantiated = init();       }     return instantiated;  }

    }})()/*calling public methods is then as easy as:*/Singleton.getInstance().publicMethod();

结果:

hello world

在实践中,单体模式有什么用处吗?当需要一个对象来协调整个系统的时候,单体是很有用的。最后一个关于单体的例子:

var SingletonTester = (function(){  function Singleton(args){     var args = args || {};       this.name = 'SingletonTester';     this.pointX = args.pointX || 6;      this.pointY = args.pointY || 10; } var instance; var _static = {      name: 'SingletonTestet',            getInstance: function(args){          if(instance === undefined){                instance = new Singleton(args);          }         return instance;      } };    return _static;})();var singletonTest = SingletonTester.getInstance({pointX:5});console.log(singletonTest.pointX);

结果:

5

[笔记二]Essential JavaScript Design Patterns For Beginners相关推荐

  1. [笔记一]Essential JavaScript Design Patterns For Beginners

    最近在看Essential JavaScript Design Patterns For Beginners 原文地址:http://www.addyosmani.com/resources/esse ...

  2. [读书笔记]《Hands on Design Patterns with C++》——类,继承,多态,模板

    前言 <Hands on Design Patterns with C++>首先这本书不是跟之前的书籍一样只是重点在经典的 23 种"设计模式" 上,这些经典的设计模式 ...

  3. Distributed Systems笔记-Web Service Design Patterns

    CMU 95702 Distributed Systems 笔记.简单介绍 XML-RPC.SOAP.REST 三种 web 服务实现方案以及 RPC.Message.Resource 三种 patt ...

  4. [读书笔记]《Hands on Design Patterns with C++》—— CRTP

    多态是指使用父类可以访问基类的内容,并且基类对子类的内容毫不知情,因为父类已经写了或者被编译了,但是基类可能还没有没编写出来.但是有一个 idiom, Curiously Recurring Temp ...

  5. [译] 前端攻略-从路人甲到英雄无敌二:JavaScript 与不断演化的框架

    本文翻译自FreeCodeCamp的from-zero-to-front-end-hero-part. 继续译者的废话,这篇文章是前端攻略-从路人甲到英雄无敌的下半部分,在上半篇中介绍了HTML与CS ...

  6. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  7. 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...

    设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns) 目录 · 概述 · Factory · What is the Fact ...

  8. 《Design Patterns Explained》读书笔记

    Design Patterns Explained: A New Perspective onObject-Oriented Design 作者:Alan Shalloway, James R. Tr ...

  9. 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)

    [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...

最新文章

  1. C 语言中 void* 详解及应用介绍
  2. 新手理解的JS原型链
  3. ODAC(V9.5.15) 学习笔记(三)TOraSession(3)
  4. 什么是 Java 对象深拷贝?面试必问!
  5. 如何通过BIPlatform完成多维报表以及图形配置
  6. Matlab图像处理创新实践-实验2【图像滤波基础(2)】
  7. 找出第一个只出现一次的字符
  8. wxWidgets:wxAuiNotebookEvent类用法
  9. Semaphore源码分析
  10. HID接口设备-硬件要求
  11. PAT (Basic Level) 1055 集体照(模拟,好题)
  12. Oracle OCM 认证指南
  13. 1015 德才论 (25分)
  14. 华为鸿蒙mota30手机多少钱,华为Mate30系列基本确认:麒麟985、鸿蒙系统、5G,价格满意!...
  15. 个人计算机的防毒软件无法防御,在win10系统中无法启动defender防御软件的解决方法...
  16. arm linux装wine,Ubuntu下安装wine详细介绍
  17. 使用ByteArrayOutputStream解决IO乱码问题的踩坑记录
  18. apache 服务器修改网站默认首页
  19. 三菱M70M700数控系统简明调试手册 PLC编程手册 设定手册
  20. C语言 通讯录项目完整代码

热门文章

  1. 开博第一篇,附上我开通博客的理由
  2. Json.Net学习笔记(十) 保持对象引用
  3. 一篇文章入门Redis
  4. 03_ Flume采集(监听)目录到HDFS案例
  5. CentOS6.X安装10G需要额外安装的软件包
  6. ERP实施--常见问题
  7. Linux安装SQLite轻量级数据库
  8. 2016-2017中国房地产走势大数据报告亮相
  9. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- 组件的生命周期...
  10. hdu2846(字典树)