Python __getattr__ в Javascript
Есть ли способ имитировать метод Python __getattr__
в Javascript?
Я хочу перехватить 'gets' и 'sets' свойств объекта Javascript.
В Python я могу написать следующее:
class A:
def __getattr__(self, key):
return key
a = A()
print( a.b ) # Output: b
Как насчет Javascript?
Ответы
Ответ 1
Нет. Самый близкий __defineGetter__
, доступный в Firefox, который определяет обратный вызов функции для вызова всякий раз, когда считывается указанное свойство:
navigator.__defineGetter__('userAgent', function(){
return 'foo' // customized user agent
});
navigator.userAgent; // 'foo'
Он отличается от __getattr__
тем, что он вызывается для известного свойства, а не как общий поиск неизвестного свойства.
Ответ 2
Не в стандарте ECMAScript-262 3-е изд.
Предстоящее пятое издание (в настоящее время проект), с другой стороны, вводит аксессоры в инициализаторы объектов. Например:
var o = {
a:7,
get b() { return this.a + 1; },
set c(x) { this.a = x / 2; }
};
Подобный синтаксис уже поддерживается Javascript 1.8.1 (как нестандартное расширение, конечно).
Обратите внимание, что на данный момент нет "завершенных" реализаций ES5 (хотя