关于javascript 类的静态属性
2012-01-31 10:59
429 查看
javascript的类静态属性是个好玩的东西,它不同于java等语言
在java中,比如一个Person类里有一个static属性,在所有的对象中拥有的是同一个地址空间,也就是说:
通过对象改变static属性,也会导致其它对象的该属性的值的改变
在javascript中,情况有所不同,如以下代码:
function Person(name,age) {
this.name = name; //属性
this.age = age; //属性 //方法
this.show = function() {
alert("name:" + this.name + ";age:" + this.age);
}
}
Person.prototype.totalCount = 8;//静态属性
Person.showTotalCount = function() {//静态方法
alert(Person.prototype.totalCount);
}
var me = new Person("Freish",23);
me.totalCount++; //通过对象改变totalCount的值 alert(me.totalCount);//这里是9,没有任何疑问
Person.showTotalCount();//然而,类的静态属性的值却没有改变!依旧是8
通过多次实验,总结如下:
类的静态变量属于类本身,而不属于对象,但是可以通过对象来访问(获取类静态属性的值)。如果通过对象给类静态属性赋值(包括++和--),那么将会为该对象创建一个独有的变量,而操作结果将保存在这个新建的对象变量中;赋值后,将不能通过该对象来访问那个类静态属性了,而只能访问到那个新建的变量!
分析以下上面例子中的me.totalCount++;
me.totalCount++大致等价于me.totalCount = me.totalCount+1;
在等号右边,me.totalCount取的是类的静态属性totalCount的值,因为此时还没有给对象me的totalCount赋值;
加1后赋值,此时为对象me创建了一个自己的变量totalCount,并将结果给这个新的变量,而没有改变类静态变量totalCount的值。
这样,再通过me.totalCount将访问到的是这个新创建的变量了!
在java中,比如一个Person类里有一个static属性,在所有的对象中拥有的是同一个地址空间,也就是说:
通过对象改变static属性,也会导致其它对象的该属性的值的改变
在javascript中,情况有所不同,如以下代码:
function Person(name,age) {
this.name = name; //属性
this.age = age; //属性 //方法
this.show = function() {
alert("name:" + this.name + ";age:" + this.age);
}
}
Person.prototype.totalCount = 8;//静态属性
Person.showTotalCount = function() {//静态方法
alert(Person.prototype.totalCount);
}
var me = new Person("Freish",23);
me.totalCount++; //通过对象改变totalCount的值 alert(me.totalCount);//这里是9,没有任何疑问
Person.showTotalCount();//然而,类的静态属性的值却没有改变!依旧是8
通过多次实验,总结如下:
类的静态变量属于类本身,而不属于对象,但是可以通过对象来访问(获取类静态属性的值)。如果通过对象给类静态属性赋值(包括++和--),那么将会为该对象创建一个独有的变量,而操作结果将保存在这个新建的对象变量中;赋值后,将不能通过该对象来访问那个类静态属性了,而只能访问到那个新建的变量!
分析以下上面例子中的me.totalCount++;
me.totalCount++大致等价于me.totalCount = me.totalCount+1;
在等号右边,me.totalCount取的是类的静态属性totalCount的值,因为此时还没有给对象me的totalCount赋值;
加1后赋值,此时为对象me创建了一个自己的变量totalCount,并将结果给这个新的变量,而没有改变类静态变量totalCount的值。
这样,再通过me.totalCount将访问到的是这个新创建的变量了!
相关文章推荐
- 关于javascript中的静态属性和静态方法
- JavaScript中的私有/静态属性
- JavaScript中document对象取得的关于窗口宽高和滚动值的属性列表
- 关于javascript原型链上属性查找的小讨论
- javascript封装类的技巧:具有私有成员、私有方法、特权属性、特权方法、原型对象、静态成员,最重要的是不会失去封装的优点,并且不影响继承
- Javascript 添加自定义静态方法属性JS清除左右空格
- 关于javascript 中的defer 属性介绍
- 关于JavaScript对象,你所不知道的事(二)- 再说属性
- JavaScript:关于事件处理程序何时可以直接访问元素的属性
- Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解
- 关于JavaScript对象中的一切(一) -- 对象属性
- 使用JAVASCRIPT实现静态物体、静态方法和静态属性
- 关于静态属性和静态函数
- 对JavaScript中的静态属性和原型属性的理解
- 关于给javascript对象添加、删除、修改对象的属性
- Javascript中定义类和静态属性
- 关于JavaScript的gzip静态压缩方法
- 关于php中静态方法,静态属性的一些浅见
- javascript 原型方法,对象方法,类方法;私有属性,公有属性,公有静态属性
- 关于静态块、静态属性、构造块、构造方法的执行顺序