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.
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.
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
:
- Można utworzyć identyfikator typu number lub string;
- Setter musi mieć jeden paramter (sprawdź szczegóły Niekompatybilna zmiana ES5: gettery i settery muszą mieć dokładnie zero lub one argument);
- Setter nie może być zdefiniowany kilkukrotnie dla danej właściwości. Jednoczesne użycie settera i faktycznej wartości przypisanej do właściwości jest zabronione
({ set x(v) { }, set x(v) { } }
oraz{ x: ..., set x(v) { } }
są zabronione)
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ż
- getter
delete
Object.defineProperty()
__defineGetter__
__defineSetter__
- Defining Getters and Setters in JavaScript Guide