【发布时间】:2016-01-20 12:04:48
【问题描述】:
我正在学习 JavaScript 中的设计模式,我正在学习 Singleton 设计模式。代码如下:
var SingletonTester = (function () {
// options: an object containing configuration options for the singleton
// e.g var options = { name: 'test', pointX: 5};
function Singleton(options) {
// set options to the options supplied or an empty object if none provided.
options = options || {};
//set the name parameter
this.name = 'SingletonTester';
//set the value of pointX
this.pointX = options.pointX || 6;
//set the value of pointY
this.pointY = options.pointY || 10;
}
// this is our instance holder
var instance;
// this is an emulation of static variables and methods
var _static = {
name: 'SingletonTester',
// This is a method for getting an instance
// It returns a singleton instance of a singleton object
getInstance: function (options) {
if (instance === undefined) {
instance = new Singleton(options);
}
return instance;
}
};
return _static;
})();
var singletonTest = SingletonTester.getInstance({
pointX: 5
});
var singletonTest1 = SingletonTester.getInstance({
pointX: 15
});
console.log(singletonTest.pointX); // outputs 5
console.log(singletonTest1.pointX); // outputs 5
我不明白为什么变量instance 在启动singletonTest1 时会获得一些值。
【问题讨论】:
-
在 JS 中,不需要
Singleton,只需要使用全局变量即可。 -
第二个^,但如果你仍然想要一个单例仿真,那么谷歌搜索“javascript单例执行器”。有一些 Git 项目可以做到这一点。无论如何都没有正确的意义。 JS 就是 JS。
-
@DavinTryon 这已经是一个单例模式,它工作正常。我的困惑是,当
singletonTest1启动时,instance变量怎么会有值。至少在评论前阅读问题。 -
@Ingmars 问题不是关于我想要单例模式,而是关于别的东西。我想问为什么
instance变量在启动singletonTest1时仍然存在。 -
@BharatSoni 之所以有效是因为
SingletonTester是一个全局变量。
标签: javascript design-patterns singleton