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模式》 - 对象创建模式的更多相关文章

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

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

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

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

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

    这一篇,我们主要来学习一下私有属性和方法以及模块模式. 三.私有属性和方法 JavaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与Java或其他语言是不同的.JavaSc ...

  4. 读书笔记之 - javascript 设计模式 - 享元模式

    本章探讨另一种优化模式-享元模式,它最适合于解决因创建大量类似对象而累及性能的问题.这种模式在javascript中尤其有用,因为复杂的javascript代码很快就会用光浏览器的所有可用内存,通过把 ...

  5. javascript的对象创建模式---命名空间模式

    javascript中对象的概念是很普遍的,对象是是对象,数组是对象,函数也是对象,字符串其实也是对象.常见的对象创建方法有对象字面量.构造函数创建.我们先来看看对象的创建还有哪些更高级的模式. 一. ...

  6. JavaScript基础对象创建模式之单体/单例模式(Singleton)

    首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大 ...

  7. JavaScript基础对象创建模式之模块模式(Module Pattern)(025)

    模块模式可以提供软件架构,为不断增长的代码提供组织形式.JavaScript没有提供package的语言表示,但我们可以通过模块模式来分解并组织 代码块,这些黑盒的代码块内的功能可以根据不断变化的软件 ...

  8. 读书笔记之 - javascript 设计模式 - 责任链模式

    责任链模式可以用来消除请求的发送者和接收者之间的耦合.这是通过实现一个由隐式地对请求进行处理的对象组成的链而做到的.链中的每个对象可以处理请求,也可以将其传给下一个对象. 责任链的结构: 责任链由多个 ...

  9. 读书笔记之 - javascript 设计模式 - 装饰者模式

    本章讨论的是一种为对象增添特性的技术,它并不使用创建新子类这种手段. 装饰者模式可以透明地把对象包装在具有同样接口的另一对象之中,这样一来,你可以给一些方法添加一些行为,然后将方法调用传递给原始对象. ...

  10. JavaScript基础对象创建模式之命名空间(Namespace)模式(022)

    JavaScript中的创建对象的基本方法有字面声明(Object Literal)和构造函数两种,但JavaScript并没有特别的语法来表示如命名空间.模块.包.私有属性.静态属性等等面向对象程序 ...

随机推荐

  1. 如何在 Arch Linux 的终端里设定 WiFi 网络

    如果你使用的是其他 Linux 发行版 而不是 Arch CLI,那么可能会不习惯在终端里设置 WiFi.尽管整个过程有点简单,不过我还是要讲一下.在这篇文章里,我将带领新手们通过一步步的设置向导,把 ...

  2. Android自动化测试框架对比

    1.Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作:缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限:2.Rubotium:主要针对某一个APK进行自动化测试,AP ...

  3. easyui datagrid 获取 title

    function exportExecl(obj) { var cfs = $(obj).datagrid('getColumnFields'); //这是获取到所有的Fields //得到title ...

  4. hdu 1205 吃糖果

    思路: 仔细想想,想要不重复吃一种糖果, 把所有糖果吃完,只要所有糖果的和,减去最多的糖果+1>=最多糖果的数量即可不重复吃完. #include <stdio.h> int mai ...

  5. XSS Filter Evasion Cheat Sheet 中文版

    前言 译者注: 翻译本文的最初原因是当我自己看到这篇文章后,觉得它是非常有价值.但是这么著名的一个备忘录却一直没有人把它翻译成中文版.很多人仅仅是简单的把文中的 各种代码复制下来,然后看起来很刁的发在 ...

  6. 常用的sql语句(转)

    一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ...

  7. TCP,IP,HTTP,SOCKET区别和联系

    物理层-- 数据链路层-- 传输层--                       TCP协议 会话层-- 我 们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便 ...

  8. 详述Linux ftp命令的使用方法

    转自:http://os.51cto.com/art/201003/186325.htm ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里 ...

  9. 看了让人笑了很多很多次的NB的痔疮经历

    前言 这篇杂记其实是去年也就是 2013年9月30日转载的,后来在整理博客分类时七弄八弄误删掉了好多文章,就包括这一篇.今天,2014年9月29日,恰好恰好一年的时候居然在好久未登陆的 OneNote ...

  10. unity3d camera.culling mask

    原地址:http://www.cnblogs.com/88999660/archive/2013/03/14/2959439.html 官方文档对CullingMask的注释只是说了通过位移运算符,可 ...