《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设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
随机推荐
- CONTEXT MENU简介
安卓中的上下文菜单是通过长按控件元素触发的,要注意的是每次都会触发onCreateContextMenu方法: main.xml <?xml version="1.0" en ...
- ISO14443-4块传输协议的实现
ISO1444-3块传输协议主要用于应用数据的传输,其实现如下: unsigned char Apdu(unsigned char *comm,unsigned short len,unsigned ...
- java String字符串进行排序
public String afterSort(String s){ char[] ss = s.toCharArray(); Arrays.sort(ss); ...
- COJN 0484 800502电池的寿命
800502电池的寿命 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电. ...
- XJOI——NOIP2015提高组模拟题19-day1——观光旅行
http://www.hzxjhs.com:83/contest/493/problem/3 [题目大意] 给定一个有n(n<=500000)个点,m(1<=500000)条边的无向图.给 ...
- [LeetCode] 204. Count Primes 解题思路
Count the number of prime numbers less than a non-negative number, n. 问题:找出所有小于 n 的素数. 题目很简洁,但是算法实现的 ...
- 终极shell zsh
在mac上安装zsh,推荐安装. 参见http://macshuo.com/?p=676. 安装成功提示,看着很帅的样子
- BootStrap--Tables(表格) MVC中不刷新做增,删,改(C#)
自带的Tables会有自动分页,搜索等一些动能,很方便,唯一的不足就是添加,修改,删除数据需要刷新页面,并不能静态. 下面说的是如何不刷新页面(Ajax)去执行增,删,改操作. 需要用到的样式,JS库 ...
- IOS--跳转方式两种
带导航栏的Push跳转: FloatPassViewController *floatpass = [self.storyboard instantiateViewControllerWithIden ...
- 微信小程序简易教程
刚接触到微信小程序开发,这里做一个简单的教程: 1. 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的"设置"-"开 ...