Я знаю __defineGetter__
(и __defineSetter__
) имя метода действительно weird and deprecated, но я нахожу это более удобно, чем Object.defineProperty
. Сравнить себя:Object.prototype .__ defineGetter__ (и __defineSetter__) polyfill
//Readable
Something.prototype.__defineGetter__("name", function() {return this._name;});
//Uh... - what?
Object.defineProperty(Something.prototype, "name", {
get: function() {return this._name;}
});
Потому что, как я уже сказал, этот метод устарел. Так что я создаю polyfill, чтобы вернуть его в Bussiness:
if(!Object.prototype.__defineGetter__) {
Object.prototype.__defineGetter__ = function(name, func) {
Object.defineProperty(this, name, {
get: func
});
}
}
Это действительно просто вызывает стандартную Object.defineProperty
. Я мог бы назвать __defineGetter__
тем, что хотел. Я просто решил придерживаться того, что уже существовало.
Проблема заключается в том, что если я пользуюсь __defineGetter__
и __defineSetter__
полиполками на этом же имуществе, я звоню Object.defineProperty
дважды.
Мой вопрос: согласен ли звонить Object.defineProperty
дважды на том же объекте? Разве это не перезаписывает что-то, например?
Да, это будет перезаписано. –
IMHO: именно поэтому вы используете '.defineProperty' - вам не нужно писать отдельные методы для setter и getter. –
@ArtyomNeustroev Иногда сеттер в любом случае не определен. Но я считаю, что '.defineProperty' более способный, но не очень читаемый. –