Оператор set прив'язує властивість об'єкта до функції, яка буде викликана під час спроби присвоїти значення даній властивості.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
{set prop(val) { . . . }}
{set [expression](val) { . . . }}
Параметри
prop- Ім'я властивості, котра має бути прив'язана до даної функції.
val- Псевдонім змінної, що містить значення, для якого виконується спроба присвоїти його властивості
prop. - expression
- Починаючи від ECMAScript 2015, можна також використовувати вираз для обчислюваного імені властивості, до якої буде прив'язана дана функція.
Опис
У JavaScript сетер можна використати для виконання функції під час здійснення спроби змінити певну властивість. Найчастіше сетери використовуються у поєднанні з ґетерами для створення свого роду псевдовластивостей. Не можна водночас мати сетера на властивості, яка містить фактичне значення.
Зауважте особливість використання синтаксису set:
- Він може мати ідентифікатор, який є або числом, або рядком;
- Він повинен мати рівно один параметр (дивіться більше інформації у статті Несумісна зміна ES5: літеральні функції гетерів та сетерів тепер повинні мати рівно нуль аргументів та один аргумент);
- Він не повинен з'являтись у об'єктному літералі з іншим сетером чи введеними даними для тієї ж властивості.
({ set x(v) { }, set x(v) { } }та{ x: ..., set x(v) { } }заборонені)
Приклади
Визначення сетерів на нових об'єктах у об'єктних ініціалізаторах
Наступний код визначає псевдовластивість 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
Якщо вам потрібно прибрати сетер, ви можете його просто видалити:
delete o.current;
Визначення сетера на існуючому об'єкті за допомогою defineProperty
Щоб додати сетер до існуючого об'єкта, використовуйте 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"
Специфікації
| Специфікація |
|---|
| ECMAScript (ECMA-262) The definition of 'Method definitions' in that specification. |
Сумісність з веб-переглядачами
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
set | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1.5 | IE Full support 9 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 14 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
| Computed property names | Chrome Full support 46 | Edge Full support 12 | Firefox Full support 34 | IE No support No | Opera Full support 47 | Safari No support No | WebView Android Full support 46 | Chrome Android Full support 46 | Firefox Android Full support 34 | Opera Android Full support 33 | Safari iOS No support No | Samsung Internet Android Full support 5.0 | nodejs Full support Yes |
Legend
- Full support
- Full support
- No support
- No support
Див. також
- гетер
deleteObject.defineProperty()__defineGetter____defineSetter__- Визначення гетерів та сетерів у посібнику JavaScript

