标签:
该篇随我读书的进度持续更新
阅读书目:《JavaScript设计模式》
模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题./将解决问题的方法制作成模板,并且这些模板可应用于多种不同的情况.
有效模式的附加要求:适合性,实用性,适用性.
模式的优点:
优秀的模式有以下的特点
反模式:
JavaScript中的反模式示例:
设计模式:
确定->包含的类和实例,它们的角色,协作方式,职责分配
Constructor(构造器)模式:
<经典OOPL中,Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法.>
JavaScript中,创建新对象有两种方法:
1. var newObj = {};
2. var newObj = new Object();
以上两种方法都创建了空对象.
赋值方法有4种:
newObj.some = "hello world";
newObj["some"] = "hello world";
以上两种兼容ECMAScript3
Object.defineProperty(newObj,"some",{value:"hello world"});//mdn链接
Object.defineProperties(newObj,{"some":{value:"hello world"},"other":{value:"goodbye"}});//mdn链接
以上两种方法属于ECMAScript5
基本构造器:
function people(name,age){ this.name = name; this.age = age; this.toString = function(){ return this.name; }; }
问题:toString这样的函数为每个people构造器创建的新对象而重新分别定义了.
带原型的构造器:
function people(name,age){ this.name = name; this.age = age; } people.prototype.toString = function(){ return this.name; }
这样就可以单一实例在所有people对象之间共享了.
Module(模块)模式
在JavaScript中,实现模块的方法:
后三种在后面讨论,目前学习前两种
对象字面量表示法:
对象字面量不需要new来实例化,但不能用于语句开头,这会导致{被解读为一个块的开始.对象外部,新成员赋值可以用myModule.property = "Value";
使用对象字面量有助于封装和组织代码.
Module(模块)模式:
Module模式最初定义为一种在传统软件工程中为类提供私有和公有封装的方法.
而在JavaScript中,Module模式用于进一步模拟类的概念.我们通过该方式,能够使一个单独的对象拥有公有/私有方法和变量,使函数名与页面其他脚本定义的函数冲突可能性降低.
JavaScript中没有真正意义上的"私有",所以我们使用作用域来模拟该概念
//函数字面量 var myMoudle = { myProperty:"property", myConfig:{ language:"cn" }, myFunction:function(){ return "myFunction"; } }; //Module mode var newMoudle = (function() { //private var innerVar = "test"; return { //publish displayInnerVar = function() { return innerVar; } }; })();
(待续)
标签:
原文地址:http://www.cnblogs.com/thewindsword/p/5331799.html