HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
set 構文は、あるオブジェクトプロパティを、プロパティに設定しようとしたときに呼び出される関数に結びつけます。これはクラスでも使用できます。
set
const language = { set current(name) { this.log.push(name); }, log: [], }; language.current = "EN"; language.current = "FA"; console.log(language.log); // 予想される結果: Array ["EN", "FA"]
{ set prop(val) { /* … */ } } { set [expression](val) { /* … */ } }
追加の構文上の制限がいくつかあります。
prop
与えられた関数に結び付けられるプロパティの名前です。他のプロパティのオブジェクト初期化子と同じ方法で、文字列リテラル、数値リテラル、識別子のいずれかにすることができます。
val
prop に設定しようとする値を保持する変数のエイリアスです。
expression
算出プロパティ名の式を使用して関数に結び付けることもできます。
JavaScript では、セッターは指定されたプロパティを変更しようとするたびに関数を実行するために使用されます。セッターは、多くの場合、ゲッターと組み合わせて使用されます。
オブジェクトのプロパティは、データプロパティかアクセサープロパティのいずれかであり、両方を同時に持つことはできません。詳細は Object.defineProperty() を参照してください。セッター構文を使用すると、オブジェクト初期化子内でセッター関数を指定することができます。
Object.defineProperty()
const obj = { set prop() { // セッター、obj.prop を設定する際に実行される }, }
この構文を使用して定義されるプロパティは、作成されたオブジェクトの自身のプロパティであり、構成可能かつ列挙可能です。
以下の例では、擬似プロパティ current を language オブジェクトに定義します。 current に値が代入されると、 log をその値で更新します。
current
language
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 になることに注意してください。
undefined
クラスインスタンスで利用できるパブリックインスタンスセッターを定義する際にも、まったく同じ構文を使用することができます。クラス内では、メソッド間をカンマで区切る必要はありません。
class ClassWithGetSet { #msg = "hello world"; get msg() { return this.#msg; } set msg(x) { this.#msg = `hello ${x}`; } } const instance = new ClassWithGetSet(); console.log(instance.msg); // "hello world" instance.msg = "cake"; console.log(instance.msg); // "hello cake"
セッタープロパティはクラスの prototype プロパティ上に定義されるため、そのクラスのすべてのインスタンスで共有されます。オブジェクトリテラル内のセッタープロパティとは異なり、クラス内のセッタープロパティは列挙可能ではありません。
prototype
静的セッターとプライベートセッターはよく似た構文を使用することができます。これらは static およびプライベート要素のページで説明しています。
static
delete
セッターを削除したい場合は、 delete で削除するだけです。
delete language.current;
defineProperty
既存のオブジェクトにセッターを追加するには、 Object.defineProperty() を使用してください。
const o = { a: 0 }; Object.defineProperty(o, "b", { set(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"
Enable JavaScript to view this browser compatibility table.
get
class