--- title: сетер slug: Web/JavaScript/Reference/Functions/set tags: - ECMAScript 2015 - ECMAScript 5 - JavaScript - set - функції translation_of: Web/JavaScript/Reference/Functions/set ---
Оператор set
прив'язує властивість об'єкта до функції, яка буде викликана під час спроби присвоїти значення даній властивості.
{{EmbedInteractiveExample("pages/js/functions-setter.html")}}
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
.У JavaScript сетер можна використати для виконання функції під час здійснення спроби змінити певну властивість. Найчастіше сетери використовуються у поєднанні з ґетерами для створення свого роду псевдовластивостей. Не можна водночас мати сетера на властивості, яка містить фактичне значення.
Зауважте особливість використання синтаксису set
:
{ 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
Якщо вам потрібно прибрати сетер, ви можете його просто {{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')}} |
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.
{{Compat("javascript.functions.set")}}