如果接触过其它语言的,应该会接触过私有变量这一个概念。所谓私有就是没有受保护,不能修改与访问,只能通过对外接口访问与修改。但是在JavaScript中并没有私有变量这个概念,所有成员都可以通过下标访问与修改,如:
var F = function () {};
F.prototype.name = 'zhangsan';
var a = new F();
console.log(a.name); // zhangsan
a.name = 'lisi';
console.log(a.name); // lisi
在JavaScript里,实例的成员变量就这样轻而易举的被修改,有不少人在变量名的加上下划线前缀表示它是私有属性,这是一种普遍约定,但技术层面并没有限制
var F = function () {};
F.prototype._name = 'zhangsan';
var a = new F();
console.log(a._name); // zhangsan
a._name = 'lisi';
console.log(a._name); // lisi
如果要从技术手段来确保私有变量的安全性,可以这么设计代码
(function (window) {
// 定义私有变量默认值
var name = "zhangsan";
var F = function () {};
// 访问私有变量
F.prototype.getName = function () {
return name;
};
// 更新私有变量
F.prototype.setName = function (str) {
name = str;
};
window.F = F;
})(window);
var a = new F();
console.log(a.getName()); // zhangsan
a.setName('lisi');
console.log(a.getName()); // lisi
这种方式也是被使用最多最广泛的方式。