JS设计模式之单体模式(Singleton)
单体模式作为一种软件开发模式在众多面向对象语言中得到了广泛的使用,在javascript中,单体模式也是使用非常广泛的,但是由于javascript语言拥有其独特的面向对象方式,导致其和一些传统面向对象语言虽然在单体模式的思想上是一致的,但是实现起来还是有差异的。
var Singleton = {
attr1: ,
attr2: ,
method1: function() {
alert(this.attr1); //将方法绑定到事件监听器上,this指向的dom元素就会失效,这里最好使用单体对象的全名访问属性和方法
},
method2: function(arg) {
}
};
绑定事件测试代码如下:
<html>
<body>
<input id="btntest" type="button" value="测试" />
</body>
</html>
<script>
var elem = document.getElementById("btntest");
elem.addEventListener("click", Singleton.method1); //undefined
</script>
var namespace={};
namespace.Singleton={
attr1:true,
attr2:10,
method1:function(){
},
method2:function(arg){
}
}
namespace.Singleton = (function() {
var privateAttr1 = false;
var privateAttr2 = [, , ];
function privateMethod1() {
}
function privateMethod2() {
}
return {
publicAttr1: true,
publicAttr2: ,
publicMethod1: function() {
privateAttr1 = true;
privateMethod1();
},
publicMethod2: function(arg) {
privateAttr2 = [, , ];
privateMethod2();
}
}
})();
var Singleton = (function() {
var instantiated; //匿名函数创建私有变量,判断单体对象是否被创建的句柄
function init() {
return {
publicMethod: function() {
alert('hello word');
},
publicPrototype: "test"
};
}
return {
getinstance: function() {
if (!instantiated) {
instantiated = new init();
}
return instantiated;
}
}
})();
Singleton.getinstance().publicMethod();
JS设计模式之单体模式(Singleton)的更多相关文章
- JS设计模式——5.单体模式
JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html 单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? ...
- JS设计模式——5.单体模式(用了这么久,竟全然不知!)
单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? 1.可以用它来划分命名空间(这个就是就是经常用的了) 2.利用分支技术来封装浏览器之间的差异(这个还真没用过,挺新鲜) 3.借 ...
- 单例/单体模式(Singleton)
单例/单体模式(Singleton) 首先,单例模式是对象的创建模式之一,此外还包括工厂模式. 单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3, ...
- js设计模式——7.备忘录模式
js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...
- js设计模式——6.模板方法模式与职责链模式
js设计模式——6.模板方法模式与职责链模式 职责链模式
- js设计模式——5.状态模式
js设计模式——5.状态模式 代码演示 /*js设计模式——状态模式*/ // 状态(红灯,黄灯,绿灯) class State { constructor(color) { this.color = ...
- js设计模式——4.迭代器模式
js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = contain ...
- js设计模式——2.外观模式
js设计模式——2.外观模式
- js设计模式——1.代理模式
js设计模式——1.代理模式 以下是代码示例 /*js设计模式——代理模式*/ class ReadImg { constructor(fileName) { this.fileName = file ...
随机推荐
- 发现ramnit样本一枚
https://files.cnblogs.com/files/yfish/DesktopLayer.rar
- OpenCV的配置
系统配置:win7 64位系统,编译器 vs2013 一.下载OpenCV安装包(版本2.4.13) https://excellmedia.dl.sourceforge.net/project/op ...
- Register A Callback To Handle SQLITE_BUSY Errors(译)
http://www.sqlite.org/c3ref/busy_handler.html留着自己看的. Register A Callback To Handle SQLITE_BUSY Error ...
- [转]Clean up after Visual Studio
本文转自:https://weblogs.asp.net/psheriff/clean-up-after-visual-studio As programmer’s we know that if w ...
- pro2
#include<iostream> double sum(int n,dounle[]) { double array[100]; foe(int i=0;i<100;i++; ...
- JavaScript实现的3D球面标签云效果
这个效果都是由 FLASH 实现的,能不能由 JavaScript 实现呢? 我们也十分喜欢这个效果,就花了一些时间写出来了,如图所示: 效果预览点这里:http://www.miaov.com/mi ...
- [转载]MVC、MVP以及Model2(下)
通过采用MVC模式,我们可以将可视化UI元素的呈现.UI处理逻辑和业务逻辑分别定义在View.Controller和Model中,但是对于三者之间的交互,MVC并没有进行严格的限制.最为典型的就是允许 ...
- django:multivaluedictkeyerror错误
查了一下,是因为获取前台数据时,用了request.POST[],改用request.POST.get()之后没有这个报错了 细节: request.POST是用来接受从前端表单中传过来的数据,比如用 ...
- django model中的save()方法
Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None) id和pk ...
- django 的 ajax 方式上传图片
页面代码: <html> <!-- 引入相关的js文件,相对路径 --> <script type="text/javascript" ...