Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

setter

В процессе перевода.

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

Syntax

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

Параметры

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

Описание

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

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

  • Он может иметь идентификатор, который является либо числом, либо строкой;
  • Он должен иметь ровно один параметр (смотрите Incompatible ES5 change: literal getter and setter functions must now have exactly zero or one arguments для более подробной информации);
  • Он не должен объявляться в литерале объекта, с другим набором или вводом данных для того же самого свойства.
    ( { set x(v) { }, set x(v) { } } и { x: ..., set x(v) { } } запрещены)

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

Примеры

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

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

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

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

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

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

delete o.current;

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

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

var o = { a:0 };

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

o.b = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
console.log(o.a) // 5

Using a computed property name

Note: Computed properties are experimental technology, part of the ECMAScript 6 proposal, and are not widely supported by browsers yet. This will trigger a syntax error in non-supporting environments.

var expr = "foo";

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

console.log(obj.baz); // "bar"
obj.foo = "baz";      // run the setter
console.log(obj.baz); // "baz"

Specifications

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
Определение 'Object Initializer' в этой спецификации.
Стандарт Initial definition.
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Method definitions' в этой спецификации.
Стандарт Added computed property names.
ECMAScript 2017 Draft (ECMA-262)
Определение 'Method definitions' в этой спецификации.
Черновик  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 1 2.0 (1.8.1) 9 9.5 3
Computed property names Нет 34 (34) Нет Нет Нет
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Да) (Да) 1.0 (1.8.1) (Да) (Да) (Да)
Computed property names Нет Нет 34.0 (34.0) Нет Нет Нет

SpiderMonkey-specific notes

  • Starting with JavaScript 1.8.1, setters are no longer called when setting properties in object and array initializers.
  • From SpiderMonkey 38 on, a setter with a rest parameter is a SyntaxError as per the ES6 specification.

See also

Метки документа и участники

 Внесли вклад в эту страницу: d4rkm3z
 Обновлялась последний раз: d4rkm3z,