JavaScript 属性和方法的类型

JavaScript里,对象的方法和属性支持4种不同的类型

1.私有类型
   对外界完全不具有访问性

function MyClass(){
   var elements = []; //私有成员,在对象外无法访问
    elements = Array.apply(elements, arguments);
}
   只有通过特定的getter和setter才能访问
 

2.动态公有类型
  外界可以访问,每个对象实例持有一个副本,它们之间不会相互影响

function MyClass(){
   var elements = []; //私有成员,在对象外无法访问 
elements = Array.apply(elements, arguments);
//公有属性,可以通过“.”运算符或下标来访问
//this.length是私有成员elements是的length属性的getter
    this.length = {
        valueOf: function(){return elements.length;},
        toString: function(){return elements.length;}
    }
}

3.静态公有类型
   也叫原型属性,它的特点是所有对象实例共享唯一副本,对它的改写会相互影响

MyClass.prototype.x = 20; //原型属性

4.类属性
   作为类型的属性,而不是对象实例的属性,在没有构造对象时可以访问

MyClass.y = 30; //类属性

例子:

<html>
<head></head>
<body>  
<script language="javascript" type="text/javascript">  
<!--
    function dwn(s)
    {
        document.write(s + "<br/>");
    }
    function MyClass()
    {
        var p = 100;  //private property; 私有属性
        this.x = 10;  //dynamic public property 动态公有属性
    }
    MyClass.prototype.y = 20; // 原型属性
    MyClass.z = 30;  //static property //类属性

    var a = new MyClass();
    dwn(a.p);  //undefined 私有属性对象无法访问到
    dwn(a.x);   //10  公有属性
    dwn(a.y);   //20  公有属性
    a.x = 20;
    a.y = 40;
    dwn(a.x);    //20  
    dwn(a.y);    //40  //动态公有属性y覆盖了原型属性y
    delete(a.x);
    delete(a.y);
    dwn(a.x);    //undefined  动态公有属性x被删除后不存在
    dwn(a.y);    //20  动态公有属性y被删除后还原为原型属性y
    dwn(a.z);    //undefined 类属性无法通过对象访问
    dwn(MyClass.z);  //30 类属性应该通过类访问
-->
</script>  
</body>   
</html>
    结果:  

    undefined
    10
    20
    20
    40
    undefined
    20
    undefined
    30

posted @ 2009-06-11 15:52  YouBook  阅读(320)  评论(0编辑  收藏  举报