设计模式 - JavaScript 中的单例模式
Design pattern - Singleton pattern in JavaScript
我正在关注这个 article。我了解什么是单例模式,但我无法理解代码。
let Singleton = (function(){
let instance = null;
function createInstance() {
let obj = new Object("I am the new instance");
return obj;
}
return {
getInstance:function() {
console.log(instance);
if(instance === null) {
instance = createInstance();
}
return instance;
}
}
})();
function test() {
let instance1 = Singleton.getInstance();
let instance2 = Singleton.getInstance();
console.log(Object.is(instance1,instance2));
}
test();
为什么instance1和instance2是一样的,我们每次调用Singleton
时总是将实例初始化为null。
we are always initializing the instance to null whenever we call Singleton
.
你没有。 Singleton
是return
语句中的对象,不包含let instance = null
语句。该语句只执行一次;此变量在返回对象 (Singleton.getInstance
) 的 getInstance
方法中的 closure 下捕获。代码相当于
let instance = null;
function createInstance() {
let obj = new Object("I am the new instance");
return obj;
}
let Singleton = {
getInstance: function() {
console.log(instance);
if (instance === null) {
instance = createInstance();
}
return instance;
}
}
除了 instance
和 createInstance
隐藏在 IIFE 的范围内。
您可以通过插入更多日志语句来验证 let instance = null
执行了多少次(以及何时)。
我正在关注这个 article。我了解什么是单例模式,但我无法理解代码。
let Singleton = (function(){
let instance = null;
function createInstance() {
let obj = new Object("I am the new instance");
return obj;
}
return {
getInstance:function() {
console.log(instance);
if(instance === null) {
instance = createInstance();
}
return instance;
}
}
})();
function test() {
let instance1 = Singleton.getInstance();
let instance2 = Singleton.getInstance();
console.log(Object.is(instance1,instance2));
}
test();
为什么instance1和instance2是一样的,我们每次调用Singleton
时总是将实例初始化为null。
we are always initializing the instance to null whenever we call
Singleton
.
你没有。 Singleton
是return
语句中的对象,不包含let instance = null
语句。该语句只执行一次;此变量在返回对象 (Singleton.getInstance
) 的 getInstance
方法中的 closure 下捕获。代码相当于
let instance = null;
function createInstance() {
let obj = new Object("I am the new instance");
return obj;
}
let Singleton = {
getInstance: function() {
console.log(instance);
if (instance === null) {
instance = createInstance();
}
return instance;
}
}
除了 instance
和 createInstance
隐藏在 IIFE 的范围内。
您可以通过插入更多日志语句来验证 let instance = null
执行了多少次(以及何时)。