From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../javascript/reference/functions/set/index.html | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 files/ru/web/javascript/reference/functions/set/index.html (limited to 'files/ru/web/javascript/reference/functions/set/index.html') diff --git a/files/ru/web/javascript/reference/functions/set/index.html b/files/ru/web/javascript/reference/functions/set/index.html new file mode 100644 index 0000000000..8d51101997 --- /dev/null +++ b/files/ru/web/javascript/reference/functions/set/index.html @@ -0,0 +1,134 @@ +--- +title: setter +slug: Web/JavaScript/Reference/Functions/set +translation_of: Web/JavaScript/Reference/Functions/set +--- +
{{jsSidebar("Functions")}}
+ +

Оператор set связывает свойство объекта с функцией, которая будет вызвана при попытке установить это свойство.

+ +

Синтаксис

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

Параметры

+ +
+
prop
+
Имя свойства для привязки к заданной функции.
+
+ +
+
val
+
Псевдоним переменной, которая хранит значение, неудавшегося определения prop.
+
expression
+
Начиная с ECMAScript 6, вы также можете использовать выражения для вычисляемого имя свойства для привязки к данной функции.
+
+ +

Описание

+ +

В JavaScript, сеттер можно использовать для выполнения функции, когда будет попытка изменения указанного свойства. Сеттеры используются чаще всего в сочетании с геттерами для создания одного из видов псевдо-свойства. Невозможно одновременно иметь сеттер для свойства, которое содержит фактическое значение.

+ +

Обратите внимание на следующие моменты при работе с синтаксисом set:

+ +
+ +
+ +

Сеттер может быть удален оператором delete.

+ +

Примеры

+ +

Определение сеттера при инициализации новых объектов

+ +

Это позволит определить псевдо-параметр current объекта o, который задает значение, обновляющее значение log:

+ +
var o = {
+  set current (str) {
+    this.log[this.log.length] = str;
+  },
+  log: []
+}
+
+ +

обратите внимание, что current не определен и любые попытки доступа к нему вернут undefined.

+ +

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

+ +

Если вы хотите удалить сеттер, вы можете просто его удалить:

+ +
delete o.current;
+
+ +

Определение сеттера для существующих объектов используя defineProperty

+ +

Чтобы добавить сеттер на существующий объект в любое время, используйте {{jsxref("Object.defineProperty()")}}.

+ +
var 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
+ +

Использование вычисляемого имени свойства 

+ +
var expr = "foo";
+
+var obj = {
+  baz: "bar",
+  set [expr](v) { this.baz = v; }
+};
+
+console.log(obj.baz); // "bar"
+obj.foo = "baz";      // запускает сеттер
+console.log(obj.baz); // "baz"
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Начальное определение.
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES6')}}Добавлены вычесляемые имена свойств
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}} 
+ +

Совместимость с браузерами

+ +

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

+ +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf