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. CentOS 6.4 32位系统 LAMP(Apache+MySQL+PHP)安装步骤

    先来解释一下,什么是 LAMP.正如标题所言,LAMP 实际上就是 Linux.Apache.MySQL.PHP 四个名称的缩写,当然最后一个 “P” 还有其他说法是 Perl 或者 Python.不 ...

  2. Logistic Regression and Gradient Descent

    Logistic Regression and Gradient Descent Logistic regression is an excellent tool to know for classi ...

  3. 大理石在哪?(Where is the Marble?,UVa 10474)

    参考:ACM紫书 第五章 P108 [排序与检索] 下面的代码中有些 提示性输出,想Ac 需删除提示性输出语句,读者自行修改. #include <cstdio> #include < ...

  4. MAC Java 开发环境配置

    JDK Oracle官网 -> Download -> Java for Developers -> Java SE Downloads -> Java Platform (J ...

  5. ASP.NET版Memcached监控工具(转载)

    在上一篇文章<使用Memcached提高.NET应用程序的性能>中周公讲述如何在.NET中使用Memcached来提高.NET应用程序的性 能.在实际的使用中有可能出现Memcached因 ...

  6. Android Studio-设置switch/case代码块自动补齐

    相信很多和我一样的小伙伴刚从Eclipse转到Android Studio的时候,一定被快捷键给搞得头晕了,像Eclipse中代码补齐的快捷键是Alt+/ ,但是在AS中却要自己设置,这还不是问题的关 ...

  7. C++ 迭代器 基础介绍

    C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...

  8. JSP 容易弄混的几点总结

    最近在做Java Web方面的整理,遇到些问题,发现自己印象也不是很深刻了,这里作下整理,以后遇到问题再更新. 一.<%@include file="页面名称"%>和& ...

  9. Hibernate4 执行存储过程

    Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 当Hibernat ...

  10. 使用css3来实现边框圆角效果

    经常看到别人的网站有个边框来修饰文字区域,类似圆角矩形把文字环绕起来,特别有感觉,于是就试着用图片边框来修饰,但是用图片过多会拉慢网页的加载速度,能不能使用css3来实现边框圆角效果呢?当然borde ...