我有这个功能:
WSConnection: function() {
var instance = new Connection();
return instance;
},
如何调整此代码(避免创建多个实例),以便在调用Connection
时始终获得WSConnection();
类的相同实例?
答案 0 :(得分:3)
可能是:
WSConnection: function() {
this.instance = this.instance || new Connection();
return this.instance;
},
在我看来,它是所有可能解决方案中最紧凑的..
答案 1 :(得分:1)
在定义WSConnection
的对象旁边创建一个局部变量:
var connectionInstance;
// ... {
WSConnection: function() {
return connectionInstance || connectionInstance = new Connection();
},
// ... }
如果对象本身是一个类,则使用“私有类”变量(this.connectionInstance
)。
答案 2 :(得分:1)
如果此用例特定于WSConnection
函数,请使用lazily(或非lazily-suit)自己初始化的全局:
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
的另一个实例(如果这是你需要的那个,那就是)
答案 3 :(得分:1)
预先创建实例。您可以将包含对象包装在函数中,以便实例变量不是全局变量:
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;
}
};
})();
答案 4 :(得分:0)
WSConnection: (function(){
var instance = null;
return function() {
if( !instance ){
instance = new Connection();
}
return instance;
};
})()