javascript设计模式-----单例模式

来源:互联网 发布:在淘宝怎么买充值卡 编辑:程序博客网 时间:2024/06/07 10:31

一、单例模式1   (构造函数的静态属性保存实例)

function Universe(){//如果实例存在则直接返回if(typeof Universe.instance === 'object')){return Universe.instance;)}this.start_time = 0;this.bang = 'big';Universe.instance = this;return this;}//测试var uni = new Universe();var uni2 = new Universe();uni === uni2 //结果为true;

缺点:instance 属性是公开的,可以任意修改


二、单例模式2  (闭包--私有静态成员保存实例--重写构造函数)

function Universe(){//缓存实例var instance = this;this.start_time = 0;this.bang = 'big';//重写构造函数Universe = function(){return instance;};}//测试var uni = new Universe();var uni2 = new Universe();uni === uni2 //结果为true;

缺点:重写构造函数会造成原型的改变,但返回的引用却是旧构造函数对象的引用,导致丢失初始化后添加的扩展,因为没有指向新构造函数对象的引用

改进:  (让实例引用指向新构造函数)

function Universe(){//缓存实例var instance ;//重写构造函数Universe = function(){return instance;};//保留原型属性\nUniverse.prototype = this;instance = new Universe();//重置构造函数指针instance.constructor = Universe;//功能this.start_time = 0;this.bang = 'big';}

三、单例模式3( 即时函数,模块模式,私有成员保存实例)

var Universe = (function(){var instance;return function(){if(instance){return instance;}instance = this;//功能this.start_time = 0;this.bang = 'big';}})()

个人推荐此种模式,如果需要扩展,则应自行提供扩展接口

0 0
原创粉丝点击