setter

Składnia set wiąże właściwość obiektu z funkcją, która zostanie wywołana przy próbie przypisania wartości danej właściwości.

Składnia

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

Parametry

prop
Nazwa właściwości wiązanej z określoną funkcją.
val
Zmienna przechowująca wartość przekazaną do przypisania do właściwości prop.
expression
Począwszy od ECMAScript 2015, można również użyć wyrażeń w celu połaczenia funkcji z nazwą właściwości, która jest obliczana.

Description

Setter może być użyty do wywołania określonej funkcji przy każdej próbie przypisania wartości do danej właściwości. Settery są najczęściej używane razem z getterami żeby utworzyć rodzaj pseudo-właściwości. Nie ma możliwości jednoczesnego używania settera oraz faktycznej wartości przypisanej do danej właściwości.

Uwagi do składni set:

Setter może być usunięty przy użyciu operatora delete.

Przykłady

Definicja settera w nowym obiekcie podczas inicjalizacji

Poniższa składnia definiuje pseudo-właściwość current obiektu language, która podczas przypisania wartości aktualizuje tablicę log o tą wartość:

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

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

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

Zwróć uwagę, że właściwość current nie jest zdefiniowana i próby odczytu zwrócą undefined.

Usuwanie settera przy użyciu operatora delete

Setter może zostać usunięty przy użyciu delete:

delete o.current;

Definicja settera dla istniejącego obiektu przy użyciu defineProperty

Aby zdefiniować setter dla istniejącego obiektu po jego uprzednim utworzeniu użyj Object.defineProperty().

var o = {a: 0};

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

o.b = 10; // Uruchamia setter, który przypisuje 10 / 2 (5) do właściwości 'a'
console.log(o.a) // 5

Używanie wyrażenia do obliczenia nazwy settera

var expr = 'foo';

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

console.log(obj.baz); // "bar"
obj.foo = 'baz';      // uruchom setter
console.log(obj.baz); // "baz"

Specyfikacje

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Object Initializer' in that specification.
Standard Initial definition.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Method definitions' in that specification.
Standard Added computed property names.
ECMAScript (ECMA-262)
The definition of 'Method definitions' in that specification.
Living Standard  

Zgodność z przeglądarkami

BCD tables only load in the browser

Zobacz również