--- title: セッター slug: Web/JavaScript/Reference/Functions/set tags: - ECMAScript 5 - Functions - JavaScript - Language feature - 言語機能 - 関数 translation_of: Web/JavaScript/Reference/Functions/set ---
set
構文は、あるオブジェクトプロパティを関数にバインドして、プロパティに設定しようとしたときに呼び出される関数に結びつけます。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
{set prop(val) { . . . }} {set [expression](val) { . . . }}
prop
val
prop
に設定しようとする値を保持する変数のエイリアスです。expression
JavaScript では、特定のプロパティを変更しようとするたびに関数を実行するため、セッターを利用できます。セッターはたいていゲッターと合わせて、擬似的なプロパティを作成するために用いられます。実際の値を持つプロパティが、同時にセッターを持つことはできません。
set
構文を使用する際の注意事項:
set
を持ったり、データ項目を持ったりしてはいけません。{ set x(v) { }, set x(v) { } }
や { x: ..., set x(v) { } }
は不可 )以下の例では、擬似プロパティ current
を language
オブジェクトに定義します。 current
に値が代入されると、 log
をその値で更新します。
const 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
は定義されておらず、あらゆるアクセスを試みてもその結果は undefined
になることに注意してください。
delete
演算子によるセッターの削除セッターを削除したい場合は、 {{jsxref("Operators/delete", "delete")}} だけで削除できます。
delete language.current;
defineProperty
を使用して既存のオブジェクトにセッターを定義する既存のオブジェクトにセッターを追加するには、 {{jsxref("Object.defineProperty()")}} を使用します。
const 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
const expr = 'foo'; const obj = { baz: 'bar', set [expr](v) { this.baz = v; } }; console.log(obj.baz); // "bar" obj.foo = 'baz'; // セッターを実行 console.log(obj.baz); // "baz"
仕様書 |
---|
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} |
{{Compat("javascript.functions.set")}}