Если вы поддерживаете только современные браузеры, вы можете использовать ES5 Getters , но в целом это JavaScript, почему вы пытаетесь сделать его сложным?
Ваши альтернативы:
- установить правило, что вы должны использовать функцию для доступа к переменной (гадость)
- не беспокойтесь об этом.
Я бы пошелдля # 2.
Я думаю, что вы здесь путаетесь с этим синтаксисом, но на самом деле он имеет ту же проблему, что и вы сейчас:
function Person(name) {
this._name = name;
}
Person.prototype.name = function(name) {
if (name) this._name = name;
return this._name;
}
var j = new Person("Jay");
j.name() // "Jay"
j.name("Thomas"); // I can set the value as well
j.name() // "Thomas"
Кажется, вы пытаетесьсоздать настоящие приватные переменные, которые возможны, но, вероятно, не очень полезны.
function Person(name) {
var myName = name; // private
this.name = function() {
return myName;
}
}
var j = new Person("Jay");
j.name(); // still had to use perens
Наконец, поскольку у вас простой объект, мы можем это сделать.Не уверен, почему вы хотите, хотя:
var person = {};
(function(name) {
var myName = name; // myName and name, both private, but not helpful
person = {
name = myName
}
}("Jay"))
person.name // "Jay"