From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../javascript/reference/functions/set/index.html | 146 +++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 files/ja/web/javascript/reference/functions/set/index.html (limited to 'files/ja/web/javascript/reference/functions/set') diff --git a/files/ja/web/javascript/reference/functions/set/index.html b/files/ja/web/javascript/reference/functions/set/index.html new file mode 100644 index 0000000000..32b1d9b623 --- /dev/null +++ b/files/ja/web/javascript/reference/functions/set/index.html @@ -0,0 +1,146 @@ +--- +title: セッター +slug: Web/JavaScript/Reference/Functions/set +tags: + - ECMAScript 5 + - Functions + - JavaScript + - Language feature + - 言語機能 + - 関数 +translation_of: Web/JavaScript/Reference/Functions/set +--- +
{{jsSidebar("Functions")}}
+ +

set 構文は、あるオブジェクトプロパティを関数にバインドして、プロパティに設定しようとしたときに呼び出される関数に結びつけます。

+ +
{{EmbedInteractiveExample("pages/js/functions-setter.html")}}
+ + + +

構文

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

引数

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

説明

+ +

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

+ +

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

+ +
+ +
+ +

+ +

新しいオブジェクトでオブジェクトの初期化時にセッターを定義

+ +

以下の例では、擬似プロパティ currentlanguage オブジェクトに定義します。 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")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf