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