JavaScript的单例模式 (singleton in Javascript)_js面向对象
程序员文章站
2023-12-23 19:38:45
...
单例模式的基本结构:
MyNamespace.Singleton = function() {
return {};
}();
比如:
MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代码一加载的时候就已经建立了,怎么延迟加载呢?想象C#里怎么实现单例的:)采用下面这种模式:
MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具体来说,把创建单例的代码放到constructor里,在首次调用的时候再实例化:
完整的代码如下:
MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();
复制代码 代码如下:
MyNamespace.Singleton = function() {
return {};
}();
比如:
复制代码 代码如下:
MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代码一加载的时候就已经建立了,怎么延迟加载呢?想象C#里怎么实现单例的:)采用下面这种模式:
复制代码 代码如下:
MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具体来说,把创建单例的代码放到constructor里,在首次调用的时候再实例化:
完整的代码如下:
复制代码 代码如下:
MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();
推荐阅读
-
JavaScript的单例模式 (singleton in Javascript)_js面向对象
-
JavaScript 面向对象的之私有成员和公开成员_js面向对象
-
面向对象设计模式的核心法则_javascript技巧
-
javascript中的对象创建 实例附注释_js面向对象
-
javascript 模式设计之工厂模式学习心得_js面向对象
-
同一页面多个商品倒计时JS 基于面向对象的javascript
-
同一页面多个商品倒计时JS 基于面向对象的javascript
-
前端笔记之JavaScript面向对象(三)初识ES6&underscore.js&EChart.js&设计模式&贪吃蛇开发
-
面向对象程序的设计模式-单例模式
-
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能