【发布时间】:2015-11-16 22:20:54
【问题描述】:
我正在尝试找到一种 javascript OOP 方法,其中变量应该是私有的(不能从外部访问),使用非特权方法。
下面的例子应该演示一下:
var Person = (function() {
var _name;
var _surname;
var _personID;
function Person(name, surname, personID) {
_name = name;
_surname = surname;
_personID = personID;
}
Person.prototype.getName = function() {
return _name;
};
Person.prototype.getSurname = function() {
return _surname;
};
Person.prototype.getPersonID = function() {
return _personID;
};
return Person;
})();
//Testing
var max = new Person('Max', 'Smith', 2345);
max._name = 'John';
console.log(max.getName()); // Max
console.log(max.getSurname()); // Smith
console.log(max.getPersonID()); // 2345
似乎满足条件,所以max._name = 'John'没有改变值,方法仍然获取私有值(不使用.this)
但是,问题是,创建另一个对象显然是同一个对象,它引用相同的值:
//Testing
var max = new Person('Max', 'Smith', 2345);
var max2 = new Person('Max2', 'Smith2', 2345);
console.log(max.getName()); // Max2
console.log(max.getSurname()); // Smith2
console.log(max.getPersonID()); // 2345
console.log(max2.getName()); // Max2
console.log(max2.getSurname()); // Smith2
console.log(max2.getPersonID()); // 2345
如何在不公开值的情况下创建不同的对象?在 Javascript 中是否有可能?
【问题讨论】:
-
“在 Javascript 中完全可以吗?” 当然可以,但是您会失去其他好处。我建议不要将其他语言的概念强加到 JavaScript 上。
-
封装不必在语言级别强制执行。您可以在文档级别执行此操作。例如
/* Variables begins with _ are private. DO NOT modify them outside this class or you will be fired */
标签: javascript oop