如何用js实现类似于面向对象语言中类的私有变数?
用一个特殊的表示符,比如下划线,来提示这个属性是私有的。
--------------------------
我个人并不赞同用闭包来模拟。
事实上,在C#中,有privateObject这种东西可以篡改私有的property和field。而Python中,是推荐用下划线来提示私有的。你看,私有的东西并不是一定不能暴露的。
注意:私有是一种约定,并不是一种实现。
私有变数主要是两个作用:
1. 防止别人以及你自己篡改滥用你的代码。2. 防止下次你重构的时候把别人的代码搞挂了。第二个目的用一下划线就可以解决,第一个嘛……
不仅仅是私有变数,所有的设计模式都是防君子不防傻逼。
闭包。结果:
function Data(){
var a;
return {
getA:function(){return a},
setA:function(aaa){a=aaa}
}
}
从书上看来的let a = 1;
块级作用域,embracing es6!
var a;//私有变数 this.a;//公共变数function XXX()//私有方法obj.prototype.XXX=function()//公共方法
关于闭包:JavaScript之作用域与闭包详解
推荐阅读: