Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Latest commit

 

History

History
118 lines (90 loc) · 2.83 KB

File metadata and controls

118 lines (90 loc) · 2.83 KB

Новые возможности JavaScript — Расширение объектных литералов

Стандарт ECMAScript 6 добавил ряд улучшений для удобства работы с объектными литералами. В первую очередь выделяются краткие свойства и возможность определения методов без привязки анонимной функции.

Ранее при присваивании свойству значения одноимённой переменной приходилось писать примерно такую запись:

// ECMAScript 5
var a = 5;
var b = 5;

var obj = {
  a: a,
  b: b
};

console.log(obj);
// Ожидаемый результат: {a: 5, b: 5}

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

// ECMAScript 6
const a = 5;
const b = 5;

const obj = {
  a,
  b,
};

console.log(obj);
// Ожидаемый результат: {a: 5, b: 5}

Также при определении метода у объекта теперь не придётся присваивать значение со ссылкой на функцию:

// ECMAScript 5
var obj = {
  prop: true,
  fn: function(value) {
    console.log(value);
  }
}

obj.fn(false);
// Ожидаемый результат: false

Теперь можно определять методы прямо в объекте:

// ECMAScript 6
const obj = {
  prop: true,
  fn(value) {
    console.log(value);
  },
};

obj.fn(false);
// Ожидаемый результат: false

Также появилась возможность использовать вычисляемые свойства:

// ECMAScript 6
const appConst = 'string';

const obj = {
  [appConst]: v => ({v}),
};

obj[`prefix_${appConst}`] = false;

console.log(obj.string('value'));
// Ожидаемый результат: {v: "value"}

console.log(obj.prefix_string);
// Ожидаемый результат: false

Помимо прочего, ещё со стандарта ECMAScript 5 существуют геттеры и сеттеры, однако о их существовании знает не каждый:

// ECMAScript 5
const obj = {
  __id: 1,
  get id() {
    return this.__id;
  },
  set id(value) {
    this.__id = value;
  },
};

console.log(obj.id);
// Ожидаемый результат: 1

obj.id = 5;

console.log(obj.id);
// Ожидаемый результат: 5

console.log(obj.__id);
// Ожидаемый результат: 5