我正在尝试找到一种 javascript OOP 方法,其中变量应该使用非特权方法是私有(private)的(无法从外部访问)。
下面的例子应该演示它:
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'
不会更改值,并且方法仍然获取私有(private)值(不使用 .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 中可能吗?
最佳答案
Is it at all possible in Javascript?
不,不是。停止搜索,你永远找不到方法。
只需使用特权方法,它们没有任何问题。
关于Javascript OOP - 具有私有(private)变量的非特权公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745729/