1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < title > Document</ title >
6+ </ head >
7+ < body >
8+ < div > </ div >
9+
10+ < script type ="text/javascript ">
11+ var Singleton = function ( name ) {
12+ this . name = name ;
13+ this . instance = null ;
14+ } ;
15+ Singleton . prototype . getName = function ( ) {
16+ alert ( this . name ) ;
17+ } ;
18+ Singleton . getInstance = function ( name ) {
19+ if ( ! this . instance ) {
20+ this . instance = new Singleton ( name ) ;
21+ }
22+ return this . instance ;
23+ } ;
24+ var a = Singleton . getInstance ( 'sven1' ) ;
25+ var b = Singleton . getInstance ( 'sven2' ) ;
26+ // alert ( a === b ); // true
27+ // a.getName(); // sven1
28+ // b.getName(); // sven1
29+
30+ //或者:
31+ var Singleton = function ( name ) {
32+ this . name = name ;
33+ } ;
34+ Singleton . prototype . getName = function ( ) {
35+ alert ( this . name ) ;
36+ } ;
37+ Singleton . getInstance = ( function ( ) {
38+ var instance = null ;
39+ return function ( name ) {
40+ if ( ! instance ) {
41+ instance = new Singleton ( name ) ;
42+ }
43+ return instance ;
44+ }
45+ } ) ( ) ;
46+ var a = Singleton . getInstance ( 'sven1' ) ;
47+ var b = Singleton . getInstance ( 'sven2' ) ;
48+ // alert ( a === b ); // true
49+ // a.getName(); // sven1
50+ // b.getName(); // sven1
51+
52+ /**
53+ * 透明的单例模式
54+ */
55+ var CreateDiv = ( function ( ) {
56+ var instance ;
57+ var CreateDiv = function ( html ) {
58+ if ( instance ) {
59+ return instance ;
60+ }
61+ this . html = html ;
62+ this . init ( ) ;
63+ return instance = this ;
64+ } ;
65+ CreateDiv . prototype . init = function ( ) {
66+ var div = document . createElement ( 'div' ) ;
67+ div . innerHTML = this . html ;
68+ document . body . appendChild ( div ) ;
69+ } ;
70+ return CreateDiv ;
71+ } ) ( ) ;
72+ // var a = new CreateDiv( 'sven1' );
73+ // var b = new CreateDiv( 'sven2' );
74+ // alert ( a === b ); // true
75+
76+
77+ /**
78+ * 代理实现单例模式
79+ */
80+ var CreateDiv = function ( html ) {
81+ this . html = html ;
82+
83+ this . init ( ) ;
84+ } ;
85+ CreateDiv . prototype . init = function ( ) {
86+ var div = document . createElement ( 'div' ) ;
87+ div . innerHTML = this . html ;
88+ document . body . appendChild ( div ) ;
89+ } ;
90+ // 对代理类使用闭包,保证唯一instance
91+ var ProxySingletonCreateDiv = ( function ( ) {
92+ var instance ;
93+ return function ( html ) {
94+ if ( ! instance ) {
95+ instance = new CreateDiv ( html ) ;
96+ }
97+ return instance ;
98+ }
99+ } ) ( ) ;
100+ var a = new ProxySingletonCreateDiv ( 'sven1' ) ;
101+ var b = new ProxySingletonCreateDiv ( 'sven2' ) ;
102+ alert ( a === b ) ;
103+
104+ /**
105+ * 减少全局变量污染方法1
106+ * 使用命名空间
107+ */
108+ var MyApp = { } ;
109+ MyApp . namespace = function ( name ) {
110+ var parts = name . split ( '.' ) ;
111+ var current = MyApp ;
112+ for ( var i in parts ) {
113+ if ( ! current [ parts [ i ] ] ) {
114+ current [ parts [ i ] ] = { } ;
115+ }
116+ current = current [ parts [ i ] ] ;
117+
118+ }
119+ } ;
120+ MyApp . namespace ( 'event' ) ;
121+ MyApp . namespace ( 'dom.style' ) ;
122+ console . dir ( MyApp ) ;
123+ // 上述代码等价于:
124+ var MyApp = {
125+ event : { } ,
126+ dom : {
127+ style : { }
128+ }
129+ } ;
130+
131+ /**
132+ * 减少全局变量污染方法1
133+ * 闭包封装私有变量
134+ */
135+ var user = ( function ( ) {
136+ var __name = 'sven' ,
137+ __age = 29 ;
138+ return {
139+ getUserInfo : function ( ) {
140+ return __name + '-' + __age ;
141+ }
142+ }
143+ } ) ( ) ;
144+
145+ Singleton . getInstance = ( function ( ) {
146+ var instance = null ;
147+ return function ( name ) {
148+ if ( ! instance ) {
149+ instance = new Singleton ( name ) ;
150+ }
151+ return instance ;
152+ }
153+ } ) ( ) ;
154+
155+ </ script >
156+ </ body >
157+ </ html >
0 commit comments