看上去是用閉包實(shí)現(xiàn)了一個(gè)單例模式構(gòu)造類(lèi)。

西鄉(xiāng)塘網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
SingletonInheritor 是一個(gè)包含 declare 方法的對(duì)象,
這個(gè)對(duì)象的declare() 方法就可以用來(lái)將你的class構(gòu)造成單例。
var?singleton1?=?SingletonInheritor.declare(ClassA);?//?ClassA變成單例Class
var?obj1?=?ClassA.instance();?//?獲取單例對(duì)象
var?obj2?=?ClassA.instance();?//?獲取到的對(duì)象與上面是同一個(gè)
2. 構(gòu)造函數(shù)(public, private屬性和方法) 1: function Person(iName, iAge){ 2: //private field 3: var name = iName; 4: var age = iAge; 5: 6: //private method 7: var privatefn = function(){ 8: alert(name); 9: } 10: 11: return { 12: //public field 13: Name: "hello " + name, 14: Age: "hello " + age, 15: 16: ShowStudent: function(){ 17: privatefn(); 18: alert(this.Name); 19: } 20: }; 21: }調(diào)用:(new Person("xiao","10")).ShowStudent(); 3. 原型方法(prototype) 1: function c(){} 2: c.prototype={ 3: name: "init value a", 4: setName: function(iName){ 5: this.name=iName; 6: }, 7: getName: function(){ 8: alert('hello from c, name: ' + this.name); 9: } 10: }; 11: (new c).getName(); // 輸出hello from c, name: init value a 4. 構(gòu)造函數(shù)+原型方法(prototype) 1: function Person(iName) { 2: this.name = iName; 3: }; 4: 5: Person.prototype={ 6: getName: function(){ 7: returnthis.name; 8: } 9: }; 10: 11: //調(diào)用 12: var b = new Person("jack"); 13: alert(b.getName()); 5. 構(gòu)造函數(shù)+原型方法(prototype)- 節(jié)省內(nèi)存的寫(xiě)法 1: function Person(iName, iAge){ 2: this.name=iName; 3: this.age=iAge; 4: 5: //對(duì)象實(shí)例都共享同一份方法不造成內(nèi)存浪費(fèi) 6: if(typeof Person._initialized == "undefined"){ 7: Person.prototype.ShowStudent=function(){ 8: alert(this.name); 9: }; 10: Person._initialized=true; 11: } 12: } 13: //調(diào)用 14: (new Person("jack","20")).ShowStudent();以上的實(shí)現(xiàn)方法如果不用_initialized的方法,也可以指向一個(gè)外部函數(shù),道理一樣。 6. JavaScript類(lèi)的單例(Singleton)模式寫(xiě)法 1: var MyNamespace = {}; 2: MyNamespace.Singleton = (function() { 3: var uniqueInstance; // Private attribute that holds the single instance. 4: function constructor() { // All of the normal singleton code goes here. 5: // Private members. 6: var privateAttribute1 = false; 7: var privateAttribute2 = [1, 2, 3]; 8: function privateMethod1() { 9: //... 10: } 11: function privateMethod2(args) { 12: //... 13: } 14: return { // Public members. 15: publicAttribute1: true, 16: publicAttribute2: 10, 17: publicMethod1: function() { 18: // ... 19: }, 20: publicMethod2: function(args) { 21: // ... 22: } 23: } 24: } 25: return { 26: getInstance: function() { 27: if(!uniqueInstance) { // Instantiate only if the instance doesn't exist. 28: uniqueInstance = constructor(); 29: } 30: return uniqueInstance; 31: } 32: } 33: })(); 34: 35: //調(diào)用: 36: MyNamespace.Singleton.getInstance().publicMethod1(); JavaScript好書(shū)推薦(只推3本,須精讀)
好像 似乎 大概 是這個(gè)樣子滴 匿名函數(shù)問(wèn)題:
把 window["lib"]["lognModule"] =(function(){code})();
改成window["lib"]["lognModule"] =(function(){code});
不要最后那個(gè)括號(hào),最后那個(gè)括號(hào)表示執(zhí)行該返回的函數(shù);
你只是讓window.lib.lognModule對(duì)該函數(shù)的引用,而不是引用執(zhí)行完了的結(jié)果。
(function?()?{????????????????//自運(yùn)行函數(shù),初始化一些必要內(nèi)容(也可叫封包)
var?obj?=?null;???????????//定義一個(gè)變量,保存實(shí)例對(duì)象
window.getObject?=?function()?{????//初始化外部接口好調(diào)用這個(gè)實(shí)例
if?(obj?===?null)?{????????????//如果實(shí)例為空就new一個(gè)實(shí)例并保存到obj
obj?=?new?(function?()?{
var?rows?=?0;
this.getRows?=?function?()?{
return?rows;
}
this.setRows?=?function?(value)?{
rows?=?value;
}
})();
}
return?obj;?????????//最后返回該實(shí)例
}
})();
調(diào)用如下:
getObject()
得到的對(duì)象有g(shù)etRows和setRows兩個(gè)函數(shù)
可以先調(diào)用setRows更改該屬性值來(lái)判讀多次調(diào)用getObject得到的是不是同一對(duì)象
網(wǎng)站標(biāo)題:javascript單例,js class 單例
URL標(biāo)題:http://chinadenli.net/article11/dsejdgd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、建站公司、、企業(yè)建站、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)