引言:

  在javascript中创建对象是很容易的,可以使用对象字面量或者构造函数或者object.creat.在接下来的介绍中,我们将越过这些方法去寻求一些其他的对象创建模式。

  我们知道js是一种简洁明了的语言,他没有像其他语言所拥有的一些语法特征,比如命名空间,模块,包,私有属性等。那么我们又将如何通过一些模式去实现,替换那些语法特征呢?或者仅以不同于那些语法特征的方式来思考问题?

命名空间模式(namespace)

 说白了,就是在应用程序或者库中创建一个全局对像,然后把所有功能添加到改全局对象中。

 优点:减少程序中所需要的全局变量的数量,同时也有助于避免命名冲突或过长的名字前缀。

 缺点:需要输入更多的字符,附加的前缀增加了需要下载的代码量;长嵌套的名字意味着更长的属性解析查询时间。

 注意:在添加一个属性或者创建一个命名空间之前,最好是首先检查它是否已经存在。  

命名空间函数的实现实例。它是非破坏行的,如果已经存在一个命名空间,则不会重新去创建它。
var MYAPP = MYAPP || {};
MYAPP.nameSpace = function(ns_string){
  var parts = ns_string.split(","),parent = MYAPP,i;
  if(parts[0] === "MYAPP"){
    parts = parts.slice[1];  
  }
  for(i = 0;i<parts.length;i++){
    if(typeof(parent[parts[i]) === "undefined"){
      parent[parts[i]] = {};
    }
    parent = parent[parts[i]]
  }
  return parent;
}
eg:MYAPP.nameSpace(modules.module2) //MYAPP.modules.module2 = {};

声明依赖关系

在您的函数或者模块顶部声明代码所依赖的模块是一个非常好的主意。也就是创建一个局部变量并使其指向所需的模块。

优点:解析局部变量的速度要比解析全局变量要快;明确的表明了所依赖的模块
var myFunction = function(){
  var event = MYAPP.util.Event,
    dom = MYAPP.until.Dom;
}

私有属性和方法

  什么叫私有的?怎么是实现私有的?在函数中将需要保持为私有属性的数据包起来,并确保他对函数说是局部变量,这意味着外部函数不能访问它。

  特权方法就是指那些可以访问私有成员的公共方法的一个名称而已。

function Gadget(){
  var name= "ipod";
  this.getName = function(){  //特权方法
    return name
  }
}

  对象字面量以及私有性

var myobj = (function(){
  var name = "my,oh my";
  return {
    getName:function(){
      reurn name;
    }
  }
}())

  原型和私有性  

Gadget.prototype = (function(){
  var browser = "PP";
  return {
    getBrowser:function(){
      reutrn browser;
    }
  }
}())

  将私有方法揭示为公共方法

var myArray = (function(){
  var astr = "[object Array]",toString = Object.prototype.toString;
  function isArray(a){
    return toString.call(a) == astr
  }
  function indexof(){
    .....
  }
  return {
    isArray:isArray,
    indexof:indexof   }
}())

 模块模式

模块模式是本书中迄今为止介绍过的多钟模式的组合,也就是下面模式的组合;

  • 命名空间
  • 声明依赖
  • 及时函数
  • 私有和特权成员
eg:MYAPP.nameSpace("untilties.Array");
MYAPP.untities.Array = (function(){
  var uobj = MYAPP.uti.Event,
  dom = MYAPP.uti.dom,Constr;
  Constr = function(o){
    this.eles = this.toArray(o)
  }
  return Constr;
}())

静态成员

静态属性和方法就是从一个实例到另外个实例都不会发生改变的属性和方法

公有静态成员

var  PP= function(){};
PP.isShiny = function(){
 return "you bet"
}
不需要创建实例,直接函数调用即可。

私有静态成员 

以同一个构造函数创建的所有对象共享该成员;构造函数外部不可访问该成员
var PP = (fucntion(){
  var counter= 0,NewPP;
  NewPP = function(){counter +=1};
  NewPP.prototype.getLastId = function(){
    return counter;
  }
  retrun NewPP;
}())
var ihone = new PP()
ihone.getLastId(); //1;
var apple = newPP();
apple.getLastId(); //2;

《Javascript模式》之对象创建模式读书笔记的更多相关文章

  1. 【读书笔记】读《JavaScript模式》 - 对象创建模式

    JavaScript是一种简洁明了的语言,其中并没有在其他语言中经常使用的一些特殊语法特征,比如命名空间(namespace).模块(module).包(package).私有属性(private p ...

  2. 设计模式---对象创建模式之工厂方法模式(Factory Method)

    前提:“对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式(表现最为突出) 工 ...

  3. 《JavaScript 模式》读书笔记(5)— 对象创建模式1

    这又是一个新的开始,对象的重要性不言而喻.在JavaScript中创建对象是十分容易的,之前聊过的对象字面量和构造函数都可以达到目的.但是本篇中,我们越过那些方法,以寻求一些额外的对象创建模式. 本篇 ...

  4. 《JavaScript 模式》读书笔记(5)— 对象创建模式4

    我们学完了大部分对象创建模式相关的内容,下面还有一些小而精的部分. 七.对象常量 JavaScript中没有常量的概念,虽然许多现代的编程环境可能为您提供了用以创建常量的const语句.作为一种变通方 ...

  5. 《JavaScript模式》第5章 对象创建模式

    @by Ruth92(转载请注明出处) 第5章:对象创建模式 JavaScript 是一种简洁明了的语言,并没有其他语言中经常使用的一些特殊语法特征,如 命名空间.模块.包.私有属性 以及 静态成员 ...

  6. 深入理解JavaScript系列(47):对象创建模式(上篇)

    介绍 本篇主要是介绍创建对象方面的模式,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码. 模式1:命名空间(namespace) 命名空间可以减少全局命名所需的数量,避免命名冲突或过度. ...

  7. 深入理解JavaScript系列(48):对象创建模式(下篇)

    介绍 本篇主要是介绍创建对象方面的模式的下篇,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码. 模式6:函数语法糖 函数语法糖是为一个对象快速添加方法(函数)的扩展,这个主要是利用pro ...

  8. 《企业应用架构模式》(POEAA)读书笔记

    原文地址:<企业应用架构模式>(POEAA)读书笔记作者:邹齐龙(技术-5013 什么是架构 Rolph Johnson认为:架构是一种主观上的东西,是专家级的项目开发人员对系统设计的一些 ...

  9. <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合

    一.前言                                                                                       几个月前的看书笔记 ...

随机推荐

  1. 彻底卸载 RAD Studio 2009/2010/XE+ 的步骤

    重新安装 RAD 系列时,建议将上一个版本彻底卸载,彻底卸载 RAD Studio 2009/2010/XE+ 的步骤: 控制面板-->添加/删除程序中执行了卸载操作以后, 还需要做以下工作: ...

  2. 点击itemView选中checkbox

    在Listview中如果item中含有checkbox会使itemview的setonitemchecklistingner失效,我们可以通过设置checkbox的clickbale的值为false来 ...

  3. 【HDOJ】1276 士兵队列训练问题

    初看这道题目很像尤瑟夫问题, 区别是每次都是从1开始.解法也很类似.数学解递推公式.假定第K次报数后,余下人数不超过3个人.若第K次为1-3报数,那么由这三个数的当前索引n可推上一次报数之前的编号为n ...

  4. COJ 0332 The Flash

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=302 The Flash 难度级别:B: 运行时间限制:1000ms: 运行 ...

  5. javascript正则表达式(二)——方法

    正则表达式规则见:http://www.cnblogs.com/wishyouhappy/p/3756812.html,下面说明相关方法 String相关方法 概括: search() replace ...

  6. HDU5032 -- Always Cook Mushroom 树状数组 14年北京网络赛

    题意:1000*1000的格子, 坐标为(1, 1) ~ (1000, 1000), 常数 A, B, 点(x,  y)权值为 (x + A) * (y + B), q次询问, 每次询问(0, 0) ...

  7. JDK 和JRE的区别

    JRE:Java Runtime Environment/Java运行时环境目标用户:只需要运行Java程序的用户JRE包含了:Deployment,User Interface Toolkits,I ...

  8. 纯CSS无hacks的跨游览器多列布局

    利用纯CSS创建一个等高多列的布局并不件易事,本教程将着重分析出现在多列布局的多个问题,然后为大家等来一个简单全游览器通吃的解决方法,不使用图片,脚本,CSS hacks并在最严格的XHTML 规范中 ...

  9. redis常见错误

    1.Redis Error --MISCONF Redis is configured to save RDB snapshots省略 分析:(linux)未用root启动,用的app用户(没有最高权 ...

  10. LSPCI具体解释分析

    一.PCI简单介绍     PCI是一种外设总线规范.我们先来看一下什么是总线:总线是一种传输信号的路径或信道.典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的全部设备可在同一时间收到 ...