`
touchmm
  • 浏览: 1038457 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JavaScript中“单实例模式(单值模型)”的实现

阅读更多

注:本文中部分描述都是操作我的书《JavaScript高级应用与实践》而言,还请朋友们多多支持我的书,详情请见:

博主网站地址:

http://m9m.3322.org/doc/js/md00.jsp

“北京电子工业出版社”地址

http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP061230%20&booktype=main

function Singleton()
{
// 不用new则执行if中的语句
if(this == window)
return Singleton._instance || (Singleton._instance = new Singleton());

// .....这里可以放置你的其他代码

// 用new时执行的语句
return Singleton._instance || (Singleton._instance = this);
}

// 单实例的static静态获取函数
Singleton.getInstance = function()
{
return Singleton._instance || (Singleton._instance = new Singleton());
};

Singleton.prototype.name = "xiatian";
Singleton.prototype.dsp = function(){alert(this.name)};

var oTest = Singleton.getInstance();
oTest.dsp();
oTest.name = "summer";

// 可以他看出:new Singleton(),Singleton()或者Singleton.getInstance(),
// 执行的结果相同,都是summer
var oTest1 = Singleton();
oTest1.dsp();

另外的单值模型,则是利用闭包中变量的private特性来设计,它有个缺陷,就是不同的对象需要写不同的代码,
而,上面的模型则比较通用些。如下所示:
var Singleton = (function()
{
// private的变量
var uniqueInstance,
// private的方法
constructor = function()
{
// ... 你可以在这里放许多你需要初始化的代码
};
// return和"{"之间的空格可以省略
return{
getInstance: function(func)
{
// 闭包函数特性:能访问前面定义的private变量和方法
return uniqueInstance || (uniqueInstance = (func || constructor()))
// 最后一个语句,也就是"}"前的一个语句的";"可以省略
}
}
})();

或者,改良针对不同的对象,这样就比上面两种更加通用了:
var Singleton = new function()
{
// private的变量
var uniqueInstance = [],
// private的方法
constructor = function()
{
// ... 你可以在这里放许多你需要初始化的代码
};
// return和"{"之间的空格可以省略
return{
getInstance: function(func)
{
// 闭包函数特性:能访问前面定义的private变量和方法
// 同时利用对象作为数组下标,
// 对象下标特性请见《JavaScript高级应用与实践》电子工业出版社出版,夏天编著
return uniqueInstance[func] || (uniqueInstance[func] = (func || constructor)())
// 最后一个语句,也就是"}"前的一个语句的";"可以省略
}
}
};

使用:
var MyClass = function()
{
if(this == window)return new MyClass();
this.name = "xiatian";
this.dsp = function()
{
alert(this.name);
};
};
var oTest = Singleton.getInstance(MyClass);
oTest.name = "summer";
oTest.dsp();

var oTest1 = Singleton.getInstance(MyClass);
oTest1.dsp();


var MyClass1 = function()
{
if(this == window)return new MyClass();
this.name = "xiatian";
this.dsp = function()
{
alert(this.name);
};
};

var oTest11 = Singleton.getInstance(MyClass1);
oTest11.name = "summer2";
oTest11.dsp();

var oTest12 = Singleton.getInstance(MyClass1);
oTest12.dsp();

分享到:
评论

相关推荐

    JavaScript 全部实例代码

    在网页开发中,DOM(文档对象模型)操作是JavaScript的核心任务。通过JavaScript,你可以动态修改HTML元素,添加、删除或更新页面内容。实例代码中可能会涵盖`document.getElementById`、`document.createElement`、...

    网页 非常实用JavaScript的各种实例

    JavaScript是一种广泛应用于网页和网络应用的编程语言,它在网页开发中...通过学习和实践这些高级JavaScript实例,你可以提升自己的编程技能,更好地应对复杂的网页开发挑战,构建功能强大且用户体验优良的Web应用。

    JavaScript实例自学手册

    JavaScript是单线程的,但通过异步编程可以处理耗时操作,如网络请求、定时任务等,常见的异步模式有回调函数、Promise、async/await等。 七、ES6及以后的新特性 ECMAScript(ES)是JavaScript的标准化规范,新的...

    javaScript 网页开发实例教程

    MV*(Model-View-ViewModel或者Model-View-Controller)是前端开发中常见的设计模式,JavaScript的MV*框架如AngularJS遵循这一模式,实现了数据绑定、依赖注入等功能,提高了代码的可维护性和可扩展性。 七、浏览器...

    javascript经典实例

    本压缩包中的"javascript"文件,很可能是包含了一系列JavaScript的经典实例代码,用于帮助学习者理解和掌握JavaScript的基本用法和高级技巧。 在JavaScript中,经典实例往往涵盖了以下知识点: 1. **变量与数据...

    javascript实现观察者模式

    在JavaScript中,我们可以使用事件驱动模型来实现观察者模式。首先,我们需要创建一个事件中心或者称为事件管理器,这个中心将作为主题,存储所有的观察者。每当有事件发生,事件中心就会触发对应的事件,通知所有...

    JavaScript教程与实例

    《JavaScript秀网页特效》则注重实践,通过一系列精彩的网页特效实例,展示JavaScript在实现交互效果上的强大能力。这包括但不限于动画效果、表单验证、AJAX(异步JavaScript和XML)请求以获取服务器数据,以及使用...

    javascript 的一些实例,很实用的哦,400个左右

    这个压缩包中的400个JavaScript实例涵盖了语言的许多方面,是初学者和有经验的开发者提升技能的绝佳资源。你可以逐个研究这些源代码,理解其工作原理,并尝试将其应用到自己的项目中,以加深对JavaScript的理解。...

    PHP__单入口MVC模式实例

    在"PHP__单入口MVC模式实例"中,你可能会找到以下组件: - `MyMVC`:这个目录很可能是整个MVC框架的根目录,包含了模型、视图、控制器以及其他必要的文件和配置。 - `config`:配置文件通常包含数据库连接信息、...

    JavaScript王者归来实例

    本讨论将深入解析《JavaScript王者归来》一书中的实例,这些实例旨在帮助开发者全面理解和掌握JavaScript的核心概念,以及如何在实际项目中运用它们。 首先,我们要明白JavaScript的重要性。它是网页动态交互的基础...

    jsp中的 mvc模式开发 实例

    通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签,可以从模型中获取数据并展示在页面上。 3. **控制器(Controller)**:Servlet通常作为控制器,处理HTTP请求,调用模型的方法...

    javascript实例100例

    JavaScript是一种广泛应用于网页和...以上只是部分可能涉及的JavaScript知识点,"javascript实例100例"涵盖了这些领域的各种实际应用,通过学习这些例子,开发者可以提升JavaScript技能,更好地应对实际项目中的挑战。

    javascript组合使用构造函数模式和原型模式实例.docx

    ### JavaScript组合使用构造函数模式和原型模式实例解析 #### 一、引言 在JavaScript编程中,构造函数模式和原型模式是两种常见的面向对象编程(OOP)方式。这两种模式各有优势,结合使用能够更好地实现代码复用和...

    外文翻译:学用JavaScript设计模式

    jQuery作为一个非常流行的JavaScript库,其实现中也运用了许多设计模式。本书中提到了几种关键的设计模式: - **Composite Pattern(组合模式)**:将对象组合成树形结构以表示部分-整体层次结构。 - **适配器模式*...

    Javascript应用实例源码(400多个)

    原型链是JavaScript继承的基础,实例中可能会有多种继承模式的实现,如经典继承、原型链继承、构造函数继承、组合继承等,帮助开发者理解JavaScript的面向对象编程。 此外,随着Web技术的发展,ES6(ECMAScript ...

    JavaScript基础实例大全

    压缩包中包含的10多个JavaScript基础实例,旨在帮助学习者通过实际操作来掌握JavaScript的核心概念。这些实例可能涵盖了以下几个关键领域: 1. 变量与数据类型:JavaScript支持多种数据类型,包括基本类型(如字符...

    javascript oop模式讲解

    在这个讲解中,我们将深入探讨JavaScript中的OOP模式,特别是如何利用它来进行DOM操作。 在JavaScript中,OOP主要基于原型(prototype)实现,与传统的类继承机制不同。JavaScript提供了构造函数、原型对象、实例、...

    js经典实例 javascript经典实例 霓虹灯特效 js经典实例 javascript经典实例 霓虹灯特效

    根据提供的标题、描述、标签及部分内容,我们可以总结出本文主要关注的是JavaScript中实现的一个经典实例——霓虹灯特效。为了更好地理解这一知识点,我们将从以下几个方面进行深入探讨: ### 一、JavaScript简介 ...

    400多种Javascript应用实例的源码,源码有中文注解

    2. **控制结构**:在实例中,你可以看到如何使用`if...else`、`switch`、`for`、`while`等控制流程语句来实现逻辑判断和循环。 3. **函数与作用域**:了解如何定义和调用函数,以及理解作用域(全局和局部)的概念...

    JavaScript 学习实例。实用例子

    JavaScript,简称JS,是一种广泛...通过这些实例,你可以看到JavaScript在实际场景中的应用,并逐步提高编程技能。实践是检验真理的唯一标准,动手尝试每个例子,理论与实践相结合,将使你对JavaScript有更深刻的认识。

Global site tag (gtag.js) - Google Analytics