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

Есть ли javascript-эквивалент метода python __getattr__?

В python вы можете определить объект, имеющий метод __getattr__(self,key) для обработки всех неизвестных атрибутов, которые могут быть разрешимы программным образом, но в javascript вы можете определять только получатели и сеттеры для заранее определенных атрибутов. Есть ли общий способ получить предыдущую вещь, сделанную также в javascript?

Пример кода будет выглядеть следующим образом:

function X() {};
X.prototype={
  __getattr__:function(attrname) {
    return "Value for attribute '"+attrname+"'";
  }
}

x=new X()
alert(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'"

Ключевой момент получает значение атрибута программно в зависимости от имени атрибута. Атрибут предварительной настройки не помогает, потому что во время init нет информации о том, какие атрибуты могут быть запрошены.

4b9b3361

Ответ 1

К сожалению, ответ № Нет. __getattr__ Python в Javascript

У вас __defineGetter__, но, как вы отметили, вам нужно знать имя атрибута, к которому вы будете обращаться.

Кстати, я думаю, что вы имели в виду __getattr__ (__getitem__ для вещей, к которым вы хотите получить доступ с помощью []).

Ответ 2

Теперь возможно, если ваш браузер поддерживает функцию ES6 Proxy. Вы можете проверить это в таблице ECMAScript 6.

Если у вас есть поддержка прокси, вы будете использовать его следующим образом:

let handler = {
  get(target,name) {
    return `Value for attribute ${name}`
  }
}

let x = new Proxy({},handler);
console.log(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'"

Работает в chrome, firefox и node.js. Недостатки: не работает в IE - freakin IE. Скоро.