网络编程
位置:首页>> 网络编程>> JavaScript>> 由浅到深了解JavaScript类(2)

由浅到深了解JavaScript类(2)

作者:泣红亭 来源:无忧脚本 发布时间:2008-06-16 13:20:00 

标签:类,javascript,编程

类的方法

方法这个词不大好理解,我觉得说成行为会更容易理解。一个人具有许多共同的行为,比如睡觉、吃饭、走路等等,现在我们给WuYouUser类添加一个发贴的方法。

   function WuYouUser()
        {
                this.Name;
                this.ArticleCount = 0;
                
                this.NewArticle = function()
                {
                        /*
                        *
                        *        具体如何发贴我们大家都知道,不就是打打字,加加图片再按一下保存之类的按钮么?
                        *        关于具体如何发贴的代码没有必要在这里写出来,我们要了解的仅仅是方法的定义与使用
                        *        我们在这里实现一个最简单的功能,也是很重要的功能:给我们的发贴数量加上1!
                        *        注意:恐龙等级就是这样加出来的,因此呀……大家狂发贴吧。。。
                        */
                        
                        this.ArticleCount++;
                }
        }

  既然定义好了这个方法,我们来试试效果如何:

  var Wo = new WuYouUser();
        Wo.NewArticle();
        document.write(Wo.ArticleCount);

        
        可以看到输出了1,说明我们发贴成功了!真是有历史纪念意义的一刻,离恐龙等级又近一步了。

静态属性

        静态属性又称公共属性,它不属于某个类的实例,而是直接属于某个类。
       
        比如说无忧用户有一个属性:注册用户的数量,它是属于整个无忧用户的,而不是属于泣红亭或者谁的
        静态属性的声明方法是:
       
        类名.prototype.属性名 = 属性值;
       
        比如给WuYouUser类定义一个注册用户的数量Count:

  WuYouUser.prototype.Count = 0;

那么如何读取它呢?有两种方法:
       
        1. 直接用 WuYouUser.prototype.Count
        2. 使用Wo.Count
       
        这两者没有区别,都是得到0
       
        虽然读取方法可以有两种,但在改变它的时候却得特别小心了,请看下边代码

  var Biyuan = new WuYouUser();
        WuYouUser.prototype.Count++;
        document.write(Wo.Count);
        document.write(Biyuan.Count);

你会发现两者的Count属性都是1,也就是说WuYouUser.prototype.Count改变了会影响到各个实例的相应属性,其实原理就是Wo、Biyuan的Count属性与WuYouUser.prototype.Count根本就是同一个!
       
        现在来看另外一段代码:     

  var Biyuan = new WuYouUser();
        
        Biyuan.Count++; //特别注意一下这里,这是直接改变Biyuan的Count属性
        document.write(Biyuan.Count); // 输出 1
        document.write(WuYouUser.prototype.Count); //输出 0
        document.write(Wo.Count); //同样输出0,为什么?

可以看到如果直接修改实例的静态属性值,那么会出现其它实例甚至类的静态属性与它不同步了?这是因为直接修改的时候,该实例会生成一个属于该实例的属性Count,这个时候Biyuan.Count不再与WuYouUser.prototype.Count是同一个了,也不与Wo.Count是同一个,这个Count属性是属于Biyuan自己所有的,以后改变了它也只是影响它自己而已。

因此如果不是特别的需要,建议不管在读取还是赋值的时候,都统一使用WuYouUser.prototype.Count这样的方式,以做到万无一失!

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com