[笔记二]Essential JavaScript Design Patterns For Beginners
[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相关推荐
- [笔记一]Essential JavaScript Design Patterns For Beginners
最近在看Essential JavaScript Design Patterns For Beginners 原文地址:http://www.addyosmani.com/resources/esse ...
- [读书笔记]《Hands on Design Patterns with C++》——类,继承,多态,模板
前言 <Hands on Design Patterns with C++>首先这本书不是跟之前的书籍一样只是重点在经典的 23 种"设计模式" 上,这些经典的设计模式 ...
- Distributed Systems笔记-Web Service Design Patterns
CMU 95702 Distributed Systems 笔记.简单介绍 XML-RPC.SOAP.REST 三种 web 服务实现方案以及 RPC.Message.Resource 三种 patt ...
- [读书笔记]《Hands on Design Patterns with C++》—— CRTP
多态是指使用父类可以访问基类的内容,并且基类对子类的内容毫不知情,因为父类已经写了或者被编译了,但是基类可能还没有没编写出来.但是有一个 idiom, Curiously Recurring Temp ...
- [译] 前端攻略-从路人甲到英雄无敌二:JavaScript 与不断演化的框架
本文翻译自FreeCodeCamp的from-zero-to-front-end-hero-part. 继续译者的废话,这篇文章是前端攻略-从路人甲到英雄无敌的下半部分,在上半篇中介绍了HTML与CS ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...
设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns) 目录 · 概述 · Factory · What is the Fact ...
- 《Design Patterns Explained》读书笔记
Design Patterns Explained: A New Perspective onObject-Oriented Design 作者:Alan Shalloway, James R. Tr ...
- 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)
[学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...
最新文章
- C 语言中 void* 详解及应用介绍
- 新手理解的JS原型链
- ODAC(V9.5.15) 学习笔记(三)TOraSession(3)
- 什么是 Java 对象深拷贝?面试必问!
- 如何通过BIPlatform完成多维报表以及图形配置
- Matlab图像处理创新实践-实验2【图像滤波基础(2)】
- 找出第一个只出现一次的字符
- wxWidgets:wxAuiNotebookEvent类用法
- Semaphore源码分析
- HID接口设备-硬件要求
- PAT (Basic Level) 1055 集体照(模拟,好题)
- Oracle OCM 认证指南
- 1015 德才论 (25分)
- 华为鸿蒙mota30手机多少钱,华为Mate30系列基本确认:麒麟985、鸿蒙系统、5G,价格满意!...
- 个人计算机的防毒软件无法防御,在win10系统中无法启动defender防御软件的解决方法...
- arm linux装wine,Ubuntu下安装wine详细介绍
- 使用ByteArrayOutputStream解决IO乱码问题的踩坑记录
- apache 服务器修改网站默认首页
- 三菱M70M700数控系统简明调试手册 PLC编程手册 设定手册
- C语言 通讯录项目完整代码
热门文章
- 开博第一篇,附上我开通博客的理由
- Json.Net学习笔记(十) 保持对象引用
- 一篇文章入门Redis
- 03_ Flume采集(监听)目录到HDFS案例
- CentOS6.X安装10G需要额外安装的软件包
- ERP实施--常见问题
- Linux安装SQLite轻量级数据库
- 2016-2017中国房地产走势大数据报告亮相
- 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- 组件的生命周期...
- hdu2846(字典树)