Javascript也玩OOP(二)
JS也玩静态,公共和私有属性
在JS里公共和私有的区别很简单,this.的都是公共的,包括属性和方法。然后直接var propterty的都是私有的,属性方法都是这样定义的。直接看下面的代码就明白了。
JS里竟然可以模仿getter方法,使用方法如下:


<script>
function trace(arg){
document.write(arg);
document.write("<br/>");
}
//--------------------------------------------
function List(){
var private_element=[];
private_element=Array.apply(private_element,arguments);
//这里是用来模仿getter
this.length={
valueOf:function(){
return private_element.length;
},
toString:function(){
return private_element.length;
}
}
this.toString=function(){
return private_element.toString();
}
this.add=function(){
private_element.push.apply(private_element,arguments);
}
}
var list=new List(1,2,3);
trace(list);
trace(list.length);
list.add(4,5,6);
trace(list);
trace(list.length);
</script>
比较有意思的是


//这里是用来模仿getter
this.length={
valueOf:function(){
return private_element.length;
},//注意这里有个逗号,千万别漏掉了
toString:function(){
return private_element.length;
}
}
另外还有静态属性和方法,静态属性和方法无需提前声明,直接通过类名就可以创建和使用。再一个是原型变量,这个变量比较好的一个用法是设置属性的默认值


<script>
function trace(arg){
document.write(arg);
document.write("<br/>");
}
//------------------------------------
function MyClass(){
//定义一个私有变量
var private_property="I am a private property!";
//加上this就是公共变量了
this.public_property="I am a public property!";
//toString应该都值了吧
this.toString=function(){
return "[MyClass Object]";
}
}
//原型
MyClass.prototype.prototype_property="I am a prototype property!";
//静态变量
MyClass.static_property="I am a static property!";
var arg=new MyClass();
trace(arg);
trace(arg.private_property);
trace(arg.public_property);
trace(arg.prototype_property);
trace(MyClass.static_property);
arg.public_property=10;
arg.prototype_property=30;
trace(arg.public_property);
trace(arg.prototype_property);
delete(arg.public_property);
delete(arg.prototype_property);
//同原型属性,我们可以设置一些默认值,删除后,自动恢复默认值
trace(arg.public_property);
trace(arg.prototype_property);
</script>