【读书笔记】读《JavaScript模式》 - 对象创建模式
JavaScript是一种简洁明了的语言,其中并没有在其他语言中经常使用的一些特殊语法特征,比如命名空间(namespace)、模块(module)、包(package)、私有属性(private property),以及静态成员等语法。
当然,我们使用其他方式来模拟实现上述语法特征。
/**
* 1.命名空间模式
* 1>命名名称的选取:应用程序(QIANGBA)或库的名称(TIANLANG)、域名或公司(CYOU)名称
* 2>通用命名空间
* 注意名称覆盖的问题
* //不安全的代码
* var MYAPP = {};
* //更好的代码
* if (typeof MYAPP === 'undefined') {
* var MYAPP = {};
* }
* //或者用更短的语句
* var MYAPP = MYAPP || {};
* 由此,我们不必太过担心加载顺序了。
* 2.声明依赖关系
* 3.私有属性和方法
* 1>私有成员(函数字面量来实现私有性)
* function Gadget() { //仅仅是一个包含私有数据的函数,我们可以用一个立即执行的匿名函数来替换之。
* //私有成员
* var name = 'iPod';
* //公有函数
* this.getName = function () { //特权函数
* return name;
* }
* }
* 2>特权方法
* 3>私有性失效
* 4>对象字面量以及私有性
* var myobj = (function () {
* //私有成员
* var name = 'oh my baby';
* //实现公有部分
* return {
* getName: function () {
* return name;
* }
* }
* })();
* myobj.getName(); //oh my baby
* 5>原型和私有性
* 为了避免复制工作以及节省内存,可以将常用属性和方法添加到构造函数的prototype属性中。
* 6>将私有方法揭示为公共方法
* var myarray;
(function () {
var astr = '[Object Array]',
toString = Object.prototype.toString;
function isArray(a) {
return toString.call(a) === atr;
}
function indexOf(haystack, needle) {
var i = 0,
max = haystack.length;
for (; i < max; i++) {
if (haystack[i] === needle) {
return i;
}
}
return -1;
}
myarray = {
isArray: isArray,
indexOf: indexOf, //当公共indexOf方法发生了意外(如myarray.indexOf = null),
//但私有indexOf()方法仍然是安全的,此时inArray将继续正常运行
inArray: indexOf
}
})();
*/ /**
* 4.模块模式
* 1>命名空间
* 2>即时函数
* 3>私有和特权成员
* 4>声明依赖
*
* ----------- (a)揭示模块模式 -------------
* //(1)建立一个命名空间
MYAPP.namespace('MYAPP.utilities.array');
//(2)定义模块
MYAPP.utilities.array = (function () { //用即时函数进行包围
//声明依赖
var uobj = MYAPP.utilities.object,
ulang = MYAPP.utilities.lang, //私有属性
array_string = '[Object Array]',
ops = Object.prototype.toString, //私有方法
isArray = function (a) {
return opts.call(a) === array_string;
};
inArray = function (haystack, needle) {
var i = 0,
max = haystack.length;
for (; i < max; i++) {
if (haystack[i] === needle) {
return i;
}
}
return -1;
}; //揭示公有API
return {
isArray: isArray,
indexOf: inArray
}; })(); ----------- (b)创建构造函数的模块 -------------
MYAPP.namespace('MYAPP.utilities.array');
MYAPP.utilities.array = (function () { //用即时函数进行包围
//声明依赖
var uobj = MYAPP.utilities.object,
ulang = MYAPP.utilities.lang, //私有属性
Constr; //公有API
Constr = function (o) {
this.elems = this.toArray(o);
}; Constr.prototype = {
constructor: MYAPP.utilities.Array,
version: '2.0',
toArray: function (obj) {
for (var i = 0, a = [], len = obj.length; i < len; i++) {
a[i] = obj[i];
}
return a;
}
}; //返回要分配给新命名空间的构造函数
return Constr;
})(); ----------- (c)将全局变量导入到模块中 -----------
MYAPP.utilities.module = (function (app, global) {
//引用全局变量对象
//引用现在被转换成局部变量的全局应用程序命名空间对象(app)
})(MYAPP, this);
*/ /**
* 5.静态成员
* 1>公有静态成员
* //构造函数
var Gadget = function () {};
//静态方法
Gadget.isShiny = function () {
return 'you bet';
};
//向该原型中添加普通方法
Gadget.prototype.setPrice = function (price) {
this.price = price;
};
2>私有静态成员(普通闭包)
*/ /**
* 6.链模式
* return this;实现
*/ /**
* 7.method()方法
*/
【读书笔记】读《JavaScript模式》 - 对象创建模式的更多相关文章
- 《JavaScript 模式》读书笔记(5)— 对象创建模式4
我们学完了大部分对象创建模式相关的内容,下面还有一些小而精的部分. 七.对象常量 JavaScript中没有常量的概念,虽然许多现代的编程环境可能为您提供了用以创建常量的const语句.作为一种变通方 ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式1
这又是一个新的开始,对象的重要性不言而喻.在JavaScript中创建对象是十分容易的,之前聊过的对象字面量和构造函数都可以达到目的.但是本篇中,我们越过那些方法,以寻求一些额外的对象创建模式. 本篇 ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式2
这一篇,我们主要来学习一下私有属性和方法以及模块模式. 三.私有属性和方法 JavaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与Java或其他语言是不同的.JavaSc ...
- 读书笔记之 - javascript 设计模式 - 享元模式
本章探讨另一种优化模式-享元模式,它最适合于解决因创建大量类似对象而累及性能的问题.这种模式在javascript中尤其有用,因为复杂的javascript代码很快就会用光浏览器的所有可用内存,通过把 ...
- javascript的对象创建模式---命名空间模式
javascript中对象的概念是很普遍的,对象是是对象,数组是对象,函数也是对象,字符串其实也是对象.常见的对象创建方法有对象字面量.构造函数创建.我们先来看看对象的创建还有哪些更高级的模式. 一. ...
- JavaScript基础对象创建模式之单体/单例模式(Singleton)
首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大 ...
- JavaScript基础对象创建模式之模块模式(Module Pattern)(025)
模块模式可以提供软件架构,为不断增长的代码提供组织形式.JavaScript没有提供package的语言表示,但我们可以通过模块模式来分解并组织 代码块,这些黑盒的代码块内的功能可以根据不断变化的软件 ...
- 读书笔记之 - javascript 设计模式 - 责任链模式
责任链模式可以用来消除请求的发送者和接收者之间的耦合.这是通过实现一个由隐式地对请求进行处理的对象组成的链而做到的.链中的每个对象可以处理请求,也可以将其传给下一个对象. 责任链的结构: 责任链由多个 ...
- 读书笔记之 - javascript 设计模式 - 装饰者模式
本章讨论的是一种为对象增添特性的技术,它并不使用创建新子类这种手段. 装饰者模式可以透明地把对象包装在具有同样接口的另一对象之中,这样一来,你可以给一些方法添加一些行为,然后将方法调用传递给原始对象. ...
- JavaScript基础对象创建模式之命名空间(Namespace)模式(022)
JavaScript中的创建对象的基本方法有字面声明(Object Literal)和构造函数两种,但JavaScript并没有特别的语法来表示如命名空间.模块.包.私有属性.静态属性等等面向对象程序 ...
随机推荐
- workon在zsh中不起作用
先装了workon,然后装了zsh,发现在zsh里不起作用 翻了一下网上没有解答,就看了看bashrc文件,发现一句 source /usr/local/bin/virtualenvwrapper.s ...
- eclipse中建python项目并运行
1. Help → Install New Software 2.Enter http://pydev.org/updates 3.点击Click "Next" and " ...
- BUAA1389愤怒的DZY(最大值最小化)
http://acm.buaa.edu.cn/problem/1389/ 愤怒的DZY[问题描述]“愤怒的小鸟”如今已经是家喻户晓的游戏了,机智的WJC最近发明了一个类似的新游戏:“愤怒的DZY”.游 ...
- iptable
http://blog.sina.com.cn/s/blog_6fbf7e670101d60i.html
- epoch iteration batchsize
深度学习中经常看到epoch. iteration和batchsize,下面按自己的理解说说这三个的区别: (1)batchsize:批大小.在深度学习中,一般采用SGD训练,即每次训练在训练集中取b ...
- SQL2005之SA提权总结
首先,看看xp_cmdshell存在不,不存在的话先恢复下. Exec sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_confi ...
- 高性能的分布式内存对象缓存系统Memcached
Memcached概述 什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...
- 用开源Look&Feel (Substance)写 漂亮的Swing应用程序
今天用Swing 做了一个模仿QQ2009的登录界面,用到了开源的Look&Feel (Substance),在使用的过程中遇到了一些问题,也学到了一些技巧.Substance (https: ...
- [MySql]explain用法及实践
写在前面 explain对我们优化sql语句是非常有帮助的.可以通过explain+sql语句的方式分析当前sql语句. 例子 EXPLAIN table 显示这一行数据属于哪张表,若在查询中为sel ...
- 整理的dedecms标签大全,方便查找
平时用dedecms开发经常会用到一些标签,特别是首页.栏目页.内容页,这些页面都会用到标签的调用,比如title.keywords.description.arclist.field.body等,为 ...