--- title: сетер slug: Web/JavaScript/Reference/Functions/set tags: - ECMAScript 2015 - ECMAScript 5 - JavaScript - set - функції translation_of: Web/JavaScript/Reference/Functions/set ---
{{jsSidebar("Functions")}}

Оператор set прив'язує властивість об'єкта до функції, яка буде викликана під час спроби присвоїти значення даній властивості.

{{EmbedInteractiveExample("pages/js/functions-setter.html")}}

Синтаксис

{set prop(val) { . . . }}
{set [expression](val) { . . . }}

Параметри

prop
Ім'я властивості, котра має бути прив'язана до даної функції.
val
Псевдонім змінної, що містить значення, для якого виконується спроба присвоїти його властивості prop.
expression
Починаючи від ECMAScript 2015, можна також використовувати вираз для обчислюваного імені властивості, до якої буде прив'язана дана функція.

Опис

У JavaScript сетер можна використати для виконання функції під час здійснення спроби змінити певну властивість. Найчастіше сетери використовуються у поєднанні з ґетерами для створення свого роду псевдовластивостей. Не можна водночас мати сетера на властивості, яка містить фактичне значення.

Зауважте особливість використання синтаксису set:

Приклади

Визначення сетерів на нових об'єктах у об'єктних ініціалізаторах

Наступний код визначає псевдовластивість current об'єкта language. Коли current присвоюється значення, це змінює log на таке саме значення:

const language = {
  set current(name) {
    this.log.push(name);
  },
  log: []
}

language.current = 'EN';
console.log(language.log); // ['EN']

language.current = 'UA';
console.log(language.log); // ['EN', 'UA']

Зверніть увагу, що  властивість current не визначена, і будь-які спроби звернутись до неї повернуть значення undefined.

Видалення сетера оператором delete

Якщо вам потрібно прибрати сетер, ви можете його просто {{jsxref("Operators/delete", "видалити")}}:

delete o.current;

Визначення сетера на існуючому об'єкті за допомогою defineProperty

Щоб додати сетер до існуючого об'єкта, використовуйте {{jsxref("Object.defineProperty()")}}.

const o = {a: 0};

Object.defineProperty(o, 'b', {
 set: function(x) { this.a = x / 2; }
});

o.b = 10;
// Запускає сетер, який присвоює 10 / 2 (5) властивості 'a'

console.log(o.a)
// 5

Використання обчислюваного імені властивості

const expr = 'foo';

const obj = {
  baz: 'bar',
  set [expr](v) { this.baz = v; }
};

console.log(obj.baz);
// "bar"

obj.foo = 'baz';
// запустити сетер

console.log(obj.baz);
// "baz"

Специфікації

Специфікація
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}

Сумісність з веб-переглядачами

{{Compat("javascript.functions.set")}}

Див. також