Я знаю, как создавать геттеры и сеттеры для свойств, имена которых уже известны, делая что-то вроде этого:
// A trivial example:
function MyObject(val){
this.count = 0;
this.value = val;
}
MyObject.prototype = {
get value(){
return this.count < 2 ? "Go away" : this._value;
},
set value(val){
this._value = val + (++this.count);
}
};
var a = new MyObject('foo');
alert(a.value); // --> "Go away"
a.value = 'bar';
alert(a.value); // --> "bar2"
Теперь, на мой вопрос, можно ли как-то определить такие уловки и сеттеры-уловки? I.e., создайте геттеры и сеттеры для любого имени свойства, которое еще не определено.
Концепция возможна на PHP с использованием магических методов __get()
и __set()
(см. документацию по PHP для получения информации об этом), так что я действительно спрашиваю, есть ли там эквивалент JavaScript?
Излишне говорить, что мне идеально понравилось бы решение, совместимое с кросс-браузером.