js 设计模式 第三章
2012-10-11 21:39
253 查看
封装 + 信息隐藏
why?
让你同原始数据解耦和
what?
三种定义对象的方法
1 完全暴露在外的方法(利用传统的,用函数模拟构造函数。因为所有的属性和方法都是公开的public)
var Book = function(isbn,title,author){
this.isbn = isbn;
this.title = title;
this.author = author;
}
Book.prototype.display = function(){this.checkIsbn();....}
Book.prototype.checkIsbn = function(){}
所有的方法都暴露在外,即使checkIsbn不需要暴露在外。同时,所有的属性也暴露在外。isbn属性,应该在对象创建完后,不能修改。但用这种方法,仍然可用通过对象修改isbn的属性。
var jsbook = new Book('9999','js','MCZ');
jsbook.isbn='8888';
2 利用命名习惯,来说明私有变量和函数。即以‘_'开头,则表示私有的,不应该通过对象直接访问。
但问题也很明显,这种方法不能强制执行
3 利用闭包来实现
var Book = function(isbn,title,author){
var is,ti,au;
//privileged methods
this.setIsbn = function(isbn){is=isbn;}
this.setTitle = function(title){ti=title;}
this.setAuthor = function(author){au=author;}
this.setIsbn(isbn);
this.setTitle(title);
this.setAuthor(author);
}
Book.prototype.display = function(){} //public ,non-privileged methods
优点是实现了信息隐藏。缺点是:每个对象将有一份private 和 privileged method,这将可能非常耗内存;同时,这个模式非常难用于继承,因为子类将不能访问父类的私有属性和方法。
静态属性和方法
静态属性和方法是与类本身进行交互的,与对象无关。静态成员只会在内存中保存一份。
类的私有、特权成员定义在构造函数中,分别用var 和this。类的静态成员定义在闭包中。
常量
常量是值不会变的变量,在js中通过闭包来实现
why?
让你同原始数据解耦和
what?
三种定义对象的方法
1 完全暴露在外的方法(利用传统的,用函数模拟构造函数。因为所有的属性和方法都是公开的public)
var Book = function(isbn,title,author){
this.isbn = isbn;
this.title = title;
this.author = author;
}
Book.prototype.display = function(){this.checkIsbn();....}
Book.prototype.checkIsbn = function(){}
所有的方法都暴露在外,即使checkIsbn不需要暴露在外。同时,所有的属性也暴露在外。isbn属性,应该在对象创建完后,不能修改。但用这种方法,仍然可用通过对象修改isbn的属性。
var jsbook = new Book('9999','js','MCZ');
jsbook.isbn='8888';
2 利用命名习惯,来说明私有变量和函数。即以‘_'开头,则表示私有的,不应该通过对象直接访问。
但问题也很明显,这种方法不能强制执行
3 利用闭包来实现
var Book = function(isbn,title,author){
var is,ti,au;
//privileged methods
this.setIsbn = function(isbn){is=isbn;}
this.setTitle = function(title){ti=title;}
this.setAuthor = function(author){au=author;}
this.setIsbn(isbn);
this.setTitle(title);
this.setAuthor(author);
}
Book.prototype.display = function(){} //public ,non-privileged methods
优点是实现了信息隐藏。缺点是:每个对象将有一份private 和 privileged method,这将可能非常耗内存;同时,这个模式非常难用于继承,因为子类将不能访问父类的私有属性和方法。
静态属性和方法
静态属性和方法是与类本身进行交互的,与对象无关。静态成员只会在内存中保存一份。
var Book = (function(){ //private static attributes var numOfBooks = 0; //private static method function checkIsbn(isbn){} //return the constructor return function(newIsbn,newTitle,newAuthor){ //private attribute var isbn,title,author; ............... numOfBooks++; } })(); //public static method Book.convertToTitleCase = function(inputString){}
类的私有、特权成员定义在构造函数中,分别用var 和this。类的静态成员定义在闭包中。
常量
常量是值不会变的变量,在js中通过闭包来实现
var Constants = (function(){ var a = 100; var getA=function(){return a;}; return {getA:getA}; })(); alert(Constants.getA());
相关文章推荐
- js与设计模式----观察者模式
- 【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)
- JS设计模式学习实例之单例模式
- javascript学习笔记(九) js对象 设计模式
- js设计模式之观察者模式
- 几种js设计模式的理解
- js 设计模式学习(2)
- JS设计模式之观察者模式实现实时改变页面中金额数的方法
- JS设计模式之命令模式概念与用法分析
- JS常用的设计模式(14)—— 备忘录模式
- js设计模式
- js 设计模式 第十三章 Flyweight Pattern
- js原生设计模式——2面向对象编程之js原生的链式调用
- js原生设计模式——4安全的工厂方法模式之oop编程增强版
- js原生设计模式——8单例模式之简约版属性样式方法库
- js数据类型坑————————读JS 设计模式笔记
- JS设计模式之享元模式
- js设计模式之模板方法模式
- 【js设计模式笔记---装饰者模式】
- js装饰设计模式学习心得