В общепринятых версиях Javascript нет истинных сеттеров и геттеров, поэтому, если вы хотите эмулировать эффект, вы должны использовать другой синтаксис. Для свойства obj.x
использование obj.x()
для доступа к значению свойства и obj.x(123)
для установки значения выглядит довольно удобным синтаксисом.
Это может быть реализовано так:
// Basic property class
function Property(value) {
this.setter(value);
}
Property.prototype.setter = function(value) {
this.value = value * value;
}
Property.prototype.getter = function() {
return this.value;
}
Property.prototype.access = function(value) {
if (value !== undefined)
this.setter(value);
return this.getter();
}
// generator function to add convenient access syntax
function make_property(value) {
var prop = new Property(value);
function propaccess(value) {
return prop.access(value);
}
return propaccess;
}
Теперь свойства, сгенерированные make_property
, поддерживают желаемый синтаксис и квадратные значения, которым они назначены:
var obj = {
x: make_property(2)
};
alert(obj.x()); // 4
obj.x(3); // set value
alert(obj.x()); // 9