引言:

  在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. poj 2886Who Gets the Most Candies?

    http://poj.org/problem?id=2886 #include <cstdio> #include <cstring> #include <algorit ...

  2. Android SharedPreferences登录记住密码

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单 数据类型(boolean.int.float.long和S ...

  3. 安装SQL SERVER2005时,需要win7下安装IIS,记录下

    安装SQL server2005 时,需要先安装IIS,这里描述win7系统下配置IIS的方法. 虽然很多文章都有写过,这里只是重复一下 关键是IIS组件全都勾选上,如果没有全部勾选上,IIS组件没有 ...

  4. Java实现八皇后

    实验题目   回溯法实现8皇后问题 实验要求   a.掌握递归回溯算法的基本思想. b.学习掌握应用面向对象通用回溯程序框架解决实际问题.  提高面向对象编程的技能. 作业描述:在8*8格的棋盘上放置 ...

  5. 什么是券商PB业务

    PB业务(Prime Broker,主经纪商业务).所谓PB业务就是指向对冲基金等高端机构客户提供集中托管清算.后台运营.研究支持.杠杆融资.证券拆借.资金募集等一站式综合金融服务的统称.而该业务的基 ...

  6. WPF - EventSetter

    WPF中添加Event 1. ListBox中添加Event <ListBox x:Name="itemsControl" BorderThickness="0&q ...

  7. 多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

    遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块. 这里,首先提一下,遗传算法的  交叉操作.变异操作都 ...

  8. 告别LVS:使用keepalived+nginx实现负载均衡代理多个https

    需求1:CDN小节点使用尽可能少的资源实现高可用和负载均衡需求2:需要支持10多个HTTPS站点的反向代理后端环境:nginx在前端做url_hash,后端缓存服务器使用squid和lighttpd分 ...

  9. jquery中prop()方法和attr()方法的区别(转)

    jquery1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了pro ...

  10. Java基础知识强化20:面向对象和面向过程的思想对比

    面向对象与面向过程的区别  1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...