Преимущество использования «set» в свойстве объекта? - PullRequest
0 голосов
/ 05 июня 2018

Я работаю над курсом Codecademy и написал следующий работающий код:

let person = {
  _name: 'Lu Xun',
  _age: 137,

set age (newAge) {
    if (typeof newAge === 'number'){
      this._age= newAge;
    } else {
      console.log('Invalid input');
    }
  } 
}

person.age= 22;

console.log(person['_age']);

Я думал о том, как работает набор, и подумал, что он по сути работает так же, как определение метода в объекте person только с другим синтаксисом.

Итак, я попробовал это, вызвал метод age, передавая ему 22 извне объекта, используя обычный способ, которым вы вызываете метод.Это работало так же.Смотри ниже.

let person = {
  _name: 'Lu Xun',
  _age: 137,

age: function (newAge) {
    if (typeof newAge === 'number'){
      this._age= newAge;
    } else {
      console.log('Invalid input');
    }
  } 
}

person.age(22);

console.log(person['_age']);

Каковы преимущества использования синтаксиса set?то есть зачем использовать его, когда обычное определение функции / метода работает таким же образом?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Представьте, что вы написали очень большой код, и многие из них обращаются к такой переменной:

// The object
const person = { age: 12 }
// You access it very often
console.log(person.age);

Теперь вы, безусловно, хотите рассчитать возраст на основе даты рождения.При использовании метода вам придется заменить person.age на person.getAge() каждый раз, когда вы его используете.Это может занять время.С помощью геттеров / сеттеров вы можете просто заменить одну строку, и все будет работать.

Если вы не думаете, что это проблема, вы можете посмотреть этот поток Java .В Java нет методов получения / установки.

0 голосов
/ 05 июня 2018

Синтаксис get / set предназначен для свойства, тогда как использование метода - это просто метод.В большинстве случаев будет достаточно простой общедоступной переменной, однако в некоторых случаях, например, в вашем примере, вы хотите проверить входные данные, чтобы убедиться, что они соответствуют любым ожидаемым значениям.

Также рассмотрите, как ваш кодбудет называться и как это будет выглядеть.Если бы вы использовали функцию для изменения значения и функцию для получения значения, ваш код будет выглядеть примерно так:

var myObject = new CoolObject('some parameter');
myObject.setComment('this is a super cool comment');
console.log(myObject.getComment());

Где, как если бы вы реализовали функции get / set для вашего свойства, это будетвыглядит так:

var myObject = new CoolObject('some parameter');
myObject.comment = 'This is a super cool comment';
console.log(myObject.comment);

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

...