《Javascript模式》之对象创建模式读书笔记
引言:
在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模式》之对象创建模式读书笔记的更多相关文章
- 【读书笔记】读《JavaScript模式》 - 对象创建模式
JavaScript是一种简洁明了的语言,其中并没有在其他语言中经常使用的一些特殊语法特征,比如命名空间(namespace).模块(module).包(package).私有属性(private p ...
- 设计模式---对象创建模式之工厂方法模式(Factory Method)
前提:“对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式(表现最为突出) 工 ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式1
这又是一个新的开始,对象的重要性不言而喻.在JavaScript中创建对象是十分容易的,之前聊过的对象字面量和构造函数都可以达到目的.但是本篇中,我们越过那些方法,以寻求一些额外的对象创建模式. 本篇 ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式4
我们学完了大部分对象创建模式相关的内容,下面还有一些小而精的部分. 七.对象常量 JavaScript中没有常量的概念,虽然许多现代的编程环境可能为您提供了用以创建常量的const语句.作为一种变通方 ...
- 《JavaScript模式》第5章 对象创建模式
@by Ruth92(转载请注明出处) 第5章:对象创建模式 JavaScript 是一种简洁明了的语言,并没有其他语言中经常使用的一些特殊语法特征,如 命名空间.模块.包.私有属性 以及 静态成员 ...
- 深入理解JavaScript系列(47):对象创建模式(上篇)
介绍 本篇主要是介绍创建对象方面的模式,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码. 模式1:命名空间(namespace) 命名空间可以减少全局命名所需的数量,避免命名冲突或过度. ...
- 深入理解JavaScript系列(48):对象创建模式(下篇)
介绍 本篇主要是介绍创建对象方面的模式的下篇,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码. 模式6:函数语法糖 函数语法糖是为一个对象快速添加方法(函数)的扩展,这个主要是利用pro ...
- 《企业应用架构模式》(POEAA)读书笔记
原文地址:<企业应用架构模式>(POEAA)读书笔记作者:邹齐龙(技术-5013 什么是架构 Rolph Johnson认为:架构是一种主观上的东西,是专家级的项目开发人员对系统设计的一些 ...
- <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
随机推荐
- 7816的报文结构APDU
命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...
- Power Network (最大流增广路算法模板题)
Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20754 Accepted: 10872 Description A p ...
- POJ1125 Stockbroker Grapevine(最短路)
题目链接. 分析: 手感不错,1A. 直接穷举的起点, 求出不同起点到其它点最短路中最长的一条的最小值(好绕). #include <iostream> #include <cstd ...
- RFID系统的选择
RFID系统的选择关键在于:1.对自身需求的明确:2.以业务为导向:满足今天的需求,又支持明日的发展:3.选择合适的解决方案供应商. RFID技术改变传统的仓库管理方式,能为您企业提高作业效率,节省大 ...
- 【动态规划】XMU 1560 新ACM规则
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1560 题目大意: 给定n(n<=200)个任务及每个任务的耗时,问m(m< ...
- 黑马程序员_Java基础常识
一.基础常识 1,软件开发 1)什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 常见的软件 系统软件 如:DOS,windows,Linux等. 应用软件: 如:扫雷,迅雷,QQ等 ...
- 怎么都没人提 google 加密搜索呢? google如何稳定打开
1. 使用smarthosts提供的hosts文件 https://smarthosts.googlecode.com/svn/trunk/hosts2. 修改浏览器默认搜索引擎为 https://e ...
- 怎样把.git版本控制文件夹放在项目目录下
在上传本地代码到本地git库时,.git的存放目录不能放到项目根目录下(报错). 可以先把.git仓库选择其他保存路径,然后再copy到项目根目录下.
- NSOutputStream\NSInputStream
NSOutputStream-保存网络资源到本地 _filePath = [[NetworkManager sharedInstance] pathForTemporaryFileWithPrefix ...
- java在windows下加载dll
java在类中加载动态链接库文件. 类文件中: static { System.loadLibrary("dll文件"); } dll文件在工程的包路径下.例如:pro/bin/h ...