在js的面向对象写法中,并没有特定的静态属性,私有属性和公有属性。
一般来说,静态属性是直接给构造函数增加一个属性。
function con(){}
con.staticProperty=1;
由此实现静态方法。
而实例中的属性,一般都是公有的。
function con(){}
con.prototype.firstProperty=1;
con.prototype.secondProperty=2;
var obj=new con();
console.log(obj.firstProperty);
console.log(obj.secondProperty);
如上例,两个属性,都可以被实例obj调用,因此都是公有属性。
——————————————————————————————————-
对于私有属性的实现,JS中并没有给出方法,事实上,JS本身并没有私有,公有之说。
实现JS的私有属性,只能通过一些“取巧的办法”.
也看过蛮多的“取巧”,比较流行的办法是通过闭包。
function con(){
var privateObj={};
this.publicMethod=function(){ alert(privateObj);}
}
var obj=new con();
console.log(obj.publicMethod);
console.log(obj.privateObj);
new的过程中,由于方法pubicMethod引用了con的内部对象privateObj,形成了闭包,使得privateObj成为了“私有”。
这个办法有两个缺点:1,使用了闭包,过多的使用闭包肯定是不好的。 2,方法必须写在con函数的内部,如果用prototype,则无法引用privateObj。
———————————————————————————————————————————————
前几天在写JS,突然想到一个办法,来分享讨论一下。。。
强力啊,我走火入魔了…我顶~
function o(){
var privateObj = { ‘a’:1, ‘b’:2, c : function(){} }
this.A = privateObj['a'];
//..
}
我觉得闭包就可以很好的实现私有属性的行为,而你现在是想像某些高级语言一样实现get/set方法。就现在js有限的写法上,还是不能很完美的实现的。