您的位置:首页 > Web前端 > JavaScript

关于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将访问到的是这个新创建的变量了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: