构造函数的私有变量,属性和方法都是独立的。
1 window.onload = function() {
2 var person = new Person("Li");
3 alert(person.getName()); // Li
4 person.setName("Joe");
5 alert(person.getName()); // Joe
6
7 var person2 = new Person("Ji");
8 alert(person2.getName()); // Ji
9 person.setName("Joe");
10 alert(person2.getName()); // Ji
11 };
12
13 /**
14 * 人(每次调用构造函数都会重新创建方法)
15 * @param {string} name 名字
16 */
17 function Person(name) {
18 this.getName = function(){
19 return name;
20 };
21
22 this.setName = function(value){
23 name = value;
24 }
25 }
静态私有变量,属性和方法都是共享的。
1 window.onload = function() {
2 var person = new Person("Li");
3 alert(person.getName()); // Li
4 person.setName("Joe");
5 alert(person.getName()); // Joe
6
7 var person2 = new Person("Ji");
8 alert(person2.getName()); // Ji
9 person.setName("Joe");
10 alert(person2.getName()); // Joe
11 };
12
13 /**
14 * 静态私有变量,属性和方法都是共享的,不会重复创建,但是实例之间会互相影响
15 * @return {string} 姓名
16 */
17 (function(){
18 var name = "";
19
20 Person = function(value){
21 name = value;
22 };
23
24 Person.prototype.getName = function(){
25 return name;
26 }
27
28 Person.prototype.setName = function(value){
29 name = value;
30 };
31 })();
增强的模块模式,单例的特权方法。
1 window.onload = function() {
2 alert(application.getComponentCount()); // 1
3 application.registerComponent("hello");
4 alert(application.getComponentCount()); // 2
5 };
6
7 /**
8 * 增强模块模式,单例的特权方法
9 * @return {object}
10 */
11 var application = function(){
12 // 私有变量和函数
13 var components = new Array();
14
15 // 初始化
16 components.push(new String("hello"));
17
18 // 创建apllication的一个局部副本
19 var app = new String();
20
21 // 公共接口
22 app.getComponentCount = function(){
23 return components.length;
24 };
25
26 app.registerComponent = function(str){
27 if (typeof str == "string") {
28 components.push(str);
29 }
30 };
31
32 // 返回这个副本
33 return app;
34 }();