--- title: setter slug: Web/JavaScript/Reference/Functions/set translation_of: Web/JavaScript/Reference/Functions/set ---
set
語法會在物件屬性被嘗試定義時,將其屬性綁定到要呼叫的函式內。
{set prop(val) { . . . }} {set [expression](val) { . . . }}
prop
val
prop
的數值。JavaScript 的 setter 能在嘗試修改指定屬性時,執行給定函式。Setter 最常用於和 getter 一同建立虛擬屬性(pseudo-property)。你不可能給同一個屬性賦予 setter 與實際值。
使用 set
語法時,請注意以下情況:
set
的 object literal、或相同屬性入口(data entry)的 data 形式出現(不能使用 { set x(v) { }, set x(v) { } }
and { x: ..., set x(v) { } }
)delete
操作符可移除 setter。
這裡會給物件 language
定義稱為 current
的虛擬屬性。在指派數值時 log
會和該值一同更新:
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']
請注意 current
is not defined and any attempts to access it will result in undefined
.
delete
操作符移除 setter若想移除 setter 的話,可以直接使用 delete
:
delete o.current;
defineProperty
To append a setter to an existing object later at any time, use {{jsxref("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
var expr = 'foo'; var obj = { baz: 'bar', set [expr](v) { this.baz = v; } }; console.log(obj.baz); // "bar" obj.foo = 'baz'; // 跑 setter console.log(obj.baz); // "baz"
規範 | 狀態 | 註解 |
---|---|---|
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} | {{Spec2('ES5.1')}} | 初始定義。 |
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ES6')}} | 增加計算屬性名。 |
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.functions.set")}}