关于javascript 类的静态属性

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将访问到的是这个新创建的变量了!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值