[英]Good Singleton Pattern in JavaScript
我在JavaScript中使用以下Singleton模式:
var exampleClass =(function(){
//private
var a ="test";
function PrivateMethod()
{
return a;
}
//public
return{
Test: function() {
alert(PrivateMethod());
}
}
})();
當我通過StackOverflow閱讀時,我看到了很多其他的Singleton實現,我開始懷疑我是否能讓自己變得更好。 我希望有人能告訴我這樣做是對是錯。
這取決於您想要實現的目標,因為不同的實現將具有不同的好處和限制。
最簡單的實現只是一個對象文字:
var singleton = {
property: "foo",
method: function() {
alert('bar');
}
}
您在問題中提到的實現允許通過將方法封裝在閉包中並返回應該公開的內容來實現公共和私有方法。
這是一個替代方案,類似地允許公共和私有方法,並且更具可擴展性:
function MySingletonClass() {
if ( arguments.callee._singletonInstance )
return arguments.callee._singletonInstance;
arguments.callee._singletonInstance = this;
this.Foo = function() {
// ...
}
}
var a = new MySingletonClass()
var b = MySingletonClass()
Print( a === b ); // prints: true
這是我的。
差異是:
改進是:
所有函數都可以訪問私有和公共函數(因為默認情況下所有函數都是私有的)
var exampleClass =(function(){ //private var a ="test"; //declare here all functions //(both for pass jslint validation and is good to have a list //of all available functions, in case of classes with a lot of code var PrivateMethod, Test1, Test2; PrivateMethod = function() { return a; }; Test1 = function() { return PrivateMethod(); }; Test2 = function() { return Test1(); }; //public //Expose function you want to have pubblic return{ Test1: Test1, Test2: Test2 } })();
我正在使用這種模式:
var SingletonConstructor;
(function() {
var instance;
SingletonConstructor = function() {
if (typeof instance !== 'undefined')
return instance;
var a = "a";
function PrivateMethod() {
return a;
}
return instance = this;
};
})();
Google Closure就是這樣做的:
http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/base.js#427
我喜歡以下模式:
function MyClass(){
if(MyClass.instance){
return MyClass.instance;
}
MyClass.instance = this;
//constructor code goes here
}
var a = new MyClass();
var b = new MyClass();
console.log(a == b); //true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.