У меня есть класс, который имеет приватную переменную с функцией общественного сеттер/добытчика:Доступ к локальной переменной с помощью прототипа
function Circle(rad) {
var r = rad;
this.radius = function(rad) {
if(!arguments.length) return r;
r = rad;
return this;
}
}
var shape = new Circle(10);
console.log(shape.radius()); // 10
shape.r = 50;
console.log(shape.radius()); // 10
Как я могу повторить это с помощью Object.prototype
? Или, когда я хочу использовать закрытие вместо Object.prototype
? Это самое близкое, что я мог придумать, но, как вы можете видеть, вы можете напрямую изменить свойство.
function Circle(r) {
this.r = r;
}
Circle.prototype.radius = function(r) {
if(!arguments.length) return this.r;
this.r = r;
return this;
};
var shape = new Circle(10);
console.log(shape.radius()); // 10
shape.r = 50;
console.log(shape.radius()); // 50
Вы или не хотите, чтобы можно было установить его снаружи? –
Я хочу, чтобы он был доступен через публичные функции getter/setter, которые я определяю. Я не хочу, чтобы кто-либо из класса имел открытый доступ к переменной напрямую. – Wex
«Как я могу реплицировать это, используя объект-прототип класса?» Я не совсем понимаю этот вопрос. Почему вы хотите воспроизвести определенное поведение с помощью языковой функции, которая не может быть реализована? – millimoose