Кажется, что существует перекрытие функциональности между встроенным, объектным литералом 'get function()' style и Object.defineProperty.JS getters: does defineProperty заменяет или дополняет старый, встроенный синтаксис 'get' 'set'?
MDN docs для получения https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get не упоминает, что встроенные функции get не устарели.
var john = {
firstName: 'John',
lastName: 'Smith',
age: 21,
gender: 'Male'
//() → String
// Returns the full name of object.
get name() {
return this.firstName + ' ' + this.lastName
},
// (new_name:String) → undefined
// Sets the name components of the object,
// from a full name.
set name(new_name) {
var names = new_name.trim().split(/\s+/)
this.firstName = names['0'] || ''
this.lastName = names['1'] || ''
},
}
Эта статья от Mozilla Джефф Walden в (что, кажется) 2010 заявил:.
«Мы удалили поддержку нескольких устаревших геттер/сеттер синтаксисах в SpiderMonkey и Mozilla Это делает не включать {get property() {return "value";}, установить свойство (v) {}}, которое широко используется и входит в состав последнего стандарта. "
Итак:
- инлайн Get/Set OK?
- Является ли inline get/set устаревшим в пользу defineProperty?
- Когда я должен использовать каждый?
Это супер исчерпывающий ответ, спасибо! Можете ли вы предоставить ссылку для «получения», которая все еще находится в текущей спецификации? Я искал спецификацию ES5, но ее сложно найти ... – mikemaccana
Я только что обновил ответ. – ZER0