Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

setter

set 構文は、オブジェクトプロパティに対して、値を設定しようとするときに呼び出される関数を割り当てます。

構文

{set prop(val) { . . . }}
{set [expression](val) { . . . }}

引数

prop
与えられた関数を割り当てるプロパティの名称です。
val
prop に設定しようとする値を保持する変数のエイリアスです。
expression
ECMAScript 6 より、算出されたプロパティ名 (computed property name) の式を使用して関数に結び付けることもできます。

説明

JavaScript では、特定のプロパティを変更しようとするたびに関数を実行するため、setter を利用できます。setter はたいてい getter と合わせて、擬似的なプロパティを作成するために用いられます。実際の値を持つプロパティが、同時に setter を持つことはできません。

set 構文を使用する際の注意事項:

setter は delete 演算子を用いて削除できます。

オブジェクトの初期化時に新しいオブジェクトで setter を定義する

ここではオブジェクト o に疑似プロパティ current を定義して、値が設定されたときに log をその値で更新します:

var o = {
  set current (str) {
    this.log[this.log.length] = str;
  },
  log: []
}

current は定義されておらず、あらゆるアクセスを試みてもその結果は undefined になることに注意してください。

delete 演算子による setter の削除

setter を削除したい場合は、delete を使用します:

delete o.current;

defineProperty を使用して既存のオブジェクトに setter を定義する

任意のタイミングで既存のオブジェクトに setter を追加するには、Object.defineProperty() を使用します。

var o = { a:0 };

Object.defineProperty(o, "b", { set: function (x) { this.a = x / 2; } });

o.b = 10; // setter を実行。プロパティ 'a' に 10 / 2 (5) を代入
console.log(o.a) // 5

算出されたプロパティ名を使用する

注記: プロパティ名の算出は ECMAScript 6 の提案に含まれる実験的な技術であり、まだブラウザで広くはサポートされていません。非サポート環境では構文エラーが発生します。

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"

仕様

仕様書 策定状況 コメント
ECMAScript 5.1 (ECMA-262)
Object Initializer の定義
標準 最初期の定義
ECMAScript 2015 (6th Edition, ECMA-262)
Method definitions の定義
標準 computed property names を追加。
ECMAScript 2017 Draft (ECMA-262)
Method definitions の定義
ドラフト  

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 1 2.0 (1.8.1) 9 9.5 3
Computed property names 未サポート 34 (34) 未サポート 未サポート 未サポート
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) 1.0 (1.8.1) (有) (有) (有)
Computed property names 未サポート 未サポート 34.0 (34.0) 未サポート 未サポート 未サポート

SpiderMonkey に関する注記

  • JavaScript 1.8.1 より、オブジェクトや配列のイニシャライザでプロパティを設定する際に、setter は呼び出されません。
  • SpiderMonkey 38 より ES6 仕様に従い、rest parameter を持つ setter は SyntaxError が発生します。

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: yyss, teoli, ethertank
 最終更新者: yyss,