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. slf4j和log4j配置

    SLF4J即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.按照官方的说法,SLF4J是一个用于日志系统的简单Fac ...

  2. java订电影票系统

    public class Test { public static void main(String[] args) { BookTicket bookTicket = new BookTicket( ...

  3. python库requests登录zhihu

    废了很大劲,开始搞错了登录post信息的网址,后来没找到xsrf信息,看了很多文章才搞定. 大概过程如下: 打开登录页面,同时打开fldder,输入信息去监控过程. 查看post了哪些信息,哪些是自己 ...

  4. Go的50度灰:Golang新开发者要注意的陷阱和常见错误

    Go的50度灰:Golang新开发者要注意的陷阱和常见错误 http://colobu.com/2015/09/07/gotchas-and-common-mistakes-in-go-golang/

  5. apache mysql 正常启动 打开php网页延时

    金山毒霸或者升级精灵修改了WINSOCK导致的.由于我电脑上也安装了金山毒霸,而且最近几天也升级过了,应该是同样的问题.于是搜索到恢复Winsock的方法: netsh winsock reset 使 ...

  6. win7能上网,上网图标显示红叉的解决办法

    今天笔记本开机,发现电脑可以上网,但是上网图标显示红叉,看这很不爽,在网上搜了解决版本. 其实很简单,你按照下面步骤操作即可. 1,右击小图标,打开网络和共享中心. 2,更改适配器设置 把无用的无线都 ...

  7. [转载]AngularJS and scope.$apply

    http://jimhoskins.com/2012/12/17/angularjs-and-apply.html http://www.cnblogs.com/zhrj000/p/3383898.h ...

  8. TYVJ1460 旅行

    描述 A国有n座城市,每座城市都十分美,这使得A国的民众们非常喜欢旅行.然而,A国的交通十分落后,这里只有m条双向的道路,并且这些道路都十分崎岖,有的甚至还是山路,只能靠步行.通过每条道路的长度.泥泞 ...

  9. Crashing Robots(imitate)

    Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8124   Accepted: 3528 D ...

  10. Java 参数的一些心得

    java 对象入参是传入的是引用(一块内存), 基础类型是值(复制内容),测试代码如下 public class TestA { private String name; public String ...