set 構文は、あるオブジェクトプロパティを関数にバインドして、プロパティに設定しようとしたときに呼び出される関数に結びつけます。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
構文
{set prop(val) { . . . }}
{set [expression](val) { . . . }}
引数
prop- 与えられた関数を割り当てるプロパティの名称です。
valpropに設定しようとする値を保持する変数のエイリアスです。expression- ECMAScript 2015 より、算出されたプロパティ名 (computed property name) の式を使用して関数に結び付けることもできます。
説明
JavaScript では、特定のプロパティを変更しようとするたびに関数を実行するため、セッターを利用できます。セッターはたいていゲッターと合わせて、擬似的なプロパティを作成するために用いられます。実際の値を持つプロパティが、同時にセッターを持つことはできません。
set 構文を使用する際の注意事項:
- 識別子は数値でも文字列でも持つことができます。
- 厳密に 1 つの引数を持たなければなりません (詳しくは Incompatible ES5 change: literal getter and setter functions must now have exactly zero or one arguments をご覧ください)。
- あるオブジェクトリテラルが、同じプロパティのための別の
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 演算子によるセッターの削除
セッターを削除したい場合は、 delete だけで削除できます。
delete language.current;
defineProperty を使用して既存のオブジェクトにセッターを定義する
既存のオブジェクトにセッターを追加するには、 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"
仕様書
| 仕様書 |
|---|
| ECMAScript (ECMA-262) Method definitions の定義 |
ブラウザー実装状況
このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 https://github.com/mdn/browser-compat-data をチェックアウトしてプルリクエストを送信してください。
Update compatibility data on GitHub
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
set | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1.5 | IE 完全対応 9 | Opera 完全対応 9.5 | Safari 完全対応 3 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 14 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
| Computed property names | Chrome 完全対応 46 | Edge 完全対応 12 | Firefox 完全対応 34 | IE 未対応 なし | Opera 完全対応 47 | Safari 完全対応 9.1 | WebView Android 完全対応 46 | Chrome Android 完全対応 46 | Firefox Android 完全対応 34 | Opera Android 完全対応 33 | Safari iOS 完全対応 9.3 | Samsung Internet Android 完全対応 5.0 | nodejs 完全対応 あり |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
関連情報
- ゲッター
deleteObject.defineProperty()__defineGetter____defineSetter__- ゲッターとセッターの定義 (JavaScript ガイド)