Могу ли я сказать, к какому свойству относится общий getter / setter в своем теле? - PullRequest
0 голосов
/ 16 февраля 2012

Контекст (this), естественно, является объектом, к которому запрашивается свойство, но аргументы функции-получателю не передаются.Я бы хотел получить имя запрошенного свойства без использования замыканий, но похоже, что это единственный способ сделать это.

Object.defineProperty( someObj, "prop1", { get: genericGetter } );
Object.defineProperty( someObj, "prop2", { get: genericGetter } );

function genericGetter() {
    // i want to figure out whether this is called on prop1 or prop2
}

1 Ответ

2 голосов
/ 16 февраля 2012

Могу ли я сказать, к какому свойству относится универсальный метод получения / установки в своем теле?

Это не так, как работают методы получения.Свойство объекта может иметь функцию value или get.Если свойство имеет value, то чтение свойства:

var x = obj.prop;

возвращает значение value.Однако если свойство имеет вместо этого функцию get, то чтение этого свойства вызывает эту функцию.Таким образом, вы используете геттеры, если значение определенного свойства должно быть вычислено динамически, или если вы хотите выполнять определенные операции всякий раз, когда свойство читается.

Например, .innerHTML требуется геттер, потому что егозначение не сохраняется статически, но вычисляется при доступе:

var html = div.innerHTML;

Здесь браузер должен сериализовать структуру DOM, содержащуюся в элементе div.

Итак, если выЕсли вам нужна функция .get(), которая извлекает различные свойства (такая функция есть в Backbone.js), то вам не нужны геттеры.

Простейшей реализацией того, что вам нужно, будет:

someObj.getProp = function ( name ) {
    // perform required tasks
    return this[ name ];
};
...