我有这个功能:
WSConnection: function() {
var instance = new Connection();
return instance;
},
如何调整此代码(避免创建多个实例),以便Connection
在调用时始终获得类的相同实例WSConnection();
?
我有这个功能:
WSConnection: function() {
var instance = new Connection();
return instance;
},
如何调整此代码(避免创建多个实例),以便Connection
在调用时始终获得类的相同实例WSConnection();
?
或许:
WSConnection: function() {
this.instance = this.instance || new Connection();
return this.instance;
},
在我看来,这是所有可能的解决方案中最紧凑的..
WSConnection
在定义的对象旁边创建一个局部变量:
var connectionInstance;
// ... {
WSConnection: function() {
return connectionInstance || connectionInstance = new Connection();
},
// ... }
如果对象本身是一个类,则使用“私有类”变量代替 ( this.connectionInstance
)。
如果此用例特定于WSConnection
函数,请使用惰性(或非惰性——适合您自己)初始化的全局:
var _instance = null; // you can also just create the singleton instance here (eager/non-lazy initialization)
WSConnection: function() {
if (!_instance)
_instance = new Connection();
return _instance;
}
但是,如果这完全是类的内在品质,请将Connection
其变成单例;有几种方法可以做到这一点(例如 Java 将如何做到这一点),但由于 Javascript 是一种灵活的语言,我会这样做:
Connection = new Connection() // do this at a global scope
现在您将只使用Connection
获取单个全局实例而不是new Connection
;这也意味着您可能不再需要该WSConnection
功能。此外,这确保没有任何东西能够创建另一个实例Connection
(如果这是你需要的,那就是)
预先创建实例。您可以将包含对象包装在一个函数中,以便实例变量不是全局的:
var someobj = (function() {
var instance = new Connection();
return {
WSConnection: function() {
return instance;
}
};
})();
或者使用惰性创建,即在第一次使用时创建它:
var someobj = (function() {
var instance = null;
return {
WSConnection: function() {
if (instance == null) {
instance = new Connection();
}
return instance;
}
};
})();
WSConnection: (function(){
var instance = null;
return function() {
if( !instance ){
instance = new Connection();
}
return instance;
};
})()