Javascript OOP - 具有私有(private)变量的非特权公共(public)方法

标签 javascript oop

我正在尝试找到一种 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/

相关文章:

oop - 接口(interface)的功能主要是为了使用函数而不知道类是如何构建的吗?

c# - 自动从对象内的其他属性分配属性值

javascript - Angular 通用获取错误 : You must pass in a NgModule or NgModuleFactory to be bootstrapped

javascript - Jquery 可调整大小的销毁删除句柄元素

javascript - 从中心缩放后将元素保持在原始位置

javascript - Controller 中的 $http 请求?

PHP从另一个文件中获取类中的变量

javascript - Vanilla JS - 单击元素后执行代码

Javascript 关闭和内存问题

java - Java 中的动态绑定(bind)