setter
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
ÐпеÑаÑÐ¾Ñ set ÑвÑзÑÐ²Ð°ÐµÑ ÑвойÑÑво обÑекÑа Ñ ÑÑнкÑией, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ñзвана пÑи попÑÑке ÑÑÑановиÑÑ ÑÑо ÑвойÑÑво.
СинÑакÑиÑ
{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; // ÐапÑÑÐºÐ°ÐµÑ ÑеÑÑеÑ, коÑоÑÑй пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ 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"
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-method-definitions> |
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
СмоÑÑиÑе Ñакже
- getter
deleteObject.defineProperty()Object.prototype.__defineGetter__()Object.prototype.__defineSetter__()- Defining Getters and Setters в ÑÑководÑÑве по JavaScript