Почему сеттер с заданным в ES5 ключевым словом set и функцией выдает синтаксическую ошибку? - PullRequest
2 голосов
/ 04 июня 2019

Почему при определении setter выдается синтаксическая ошибка, когда функция выражается как ES5, но работает, когда выражается в ES6.

Сеттер с синтаксисом ES5 (не работает)

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "",
  set setLanguage: function(val) {
     this.language = val    
  },
  get getLanguage() {
     return this.language   
  }     
}

person.setLanguage = 'EN'
person.getLanguage
`Uncaught SyntaxError: Unexpected token :`

Сеттер с синтаксисом ES6 (Работает)

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "",
  set setLanguage(val) {
     this.language = val    
  },
  get getLanguage() {
     return this.language   
  }     
}

person.setLanguage = 'EN'
person.getLanguage

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Ваш второй пример не относится к ES6, он действителен ES5 синтаксис:

set setLanguage(val) {
    this.language = val;    
},

С Спецификация инициализатора объекта (ES5)

PropertyAssignment :
PropertyName : AssignmentExpression
get PropertyName () { FunctionBody }
set PropertyName ( PropertySetParameterList ) { FunctionBody }

Как видите, после PropertyName есть :, но в геттере или установщике : или function нет

Обновление:

Вы, вероятно, перепутали понятия имен вычисляемых свойств и получателей / установщиков

ES6 представили имен вычисляемых свойств, поэтомуВы можете сделать это (этот фрагмент вероятно не будет работать в старых браузерах, таких как IE):

const person = {
  language: "",
  setLanguage(val){
    this.language = val;
  },
  getLanguage(){
    return this.language;
  }
}

person.setLanguage("EN");

console.log("person.language", person.language);
console.log("person.getLanguage()",person.getLanguage())

Обратите внимание на отсутствие ключевых слов set или get и что вам нужно позвонить person.setLanguage("EN"); вместо person.setLanguage = "EN";

В ES5 вы 'Вам придется (изменить const на var и) использовать:

setLanguage: function(val) {
    this.language = val;    
},
getLanguage: function() {
    return this.language;    
},
0 голосов
/ 04 июня 2019

Вы неправильно определяете метод в своем объекте, прочитайте это -> Определения методов также это Определение геттеров и сеттеров

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "",
  set setLanguage(val) {
     this.language = val    
  },
  get getLanguage() {
     return this.language   
  }     
}

person.setLanguage = 'EN'
console.log(person.getLanguage)
...