To tłumaczenie jest niekompletne. Pomóż przetłumaczyć ten artykuł z języka angielskiego.

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 Latest Draft (ECMA-262)
The definition of 'Method definitions' in that specification.
Draft  

Zgodność z przeglądarkami

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support 1Edge Full support YesFirefox Full support 2IE Full support 9Opera Full support 9.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Edge Mobile Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
Computed property namesChrome Full support 46Edge Full support YesFirefox Full support 34IE No support NoOpera Full support 47Safari No support NoWebView Android Full support 46Chrome Android Full support 46Edge Mobile Full support YesFirefox Android Full support 34Opera Android Full support YesSafari iOS No support NoSamsung Internet Android Full support 5.0nodejs Full support Yes

Legend

Full support  
Full support
No support  
No support

Zobacz również

Autorzy i etykiety dokumentu

Autorzy tej strony: jedzej
Ostatnia aktualizacja: jedzej,