Подтвердить что ты не робот

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?

4b9b3361

Ответ 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 (хотя