Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
get 構文は、オブジェクトのプロパティを関数に結びつけ、プロパティが参照された時に関数が呼び出されるようにします。これはクラスでも使用できます。
追加の構文上の制限がいくつかあります。
与えられた関数に結び付けられるプロパティの名前です。他のプロパティのオブジェクト初期化子と同じ方法で、文字列リテラル、数値リテラル、識別子のいずれかにすることができます。
expression算出プロパティ名 (computed property name) の式を使用して関数に結び付けることもできます。
時として、動的に計算した値を返すプロパティにアクセスを許可したほうが望ましい場合や、明示的なメソッドを呼び出すことなく内部変数に状態を反映させたい場合があります。 JavaScript では、「ゲッター」を使ってこれを行うことが可能です。
オブジェクトのプロパティは、データプロパティかアクセサープロパティのいずれかであり、両方を同時に持つことはできません。詳細は Object.defineProperty() を参照してください。ゲッター構文を使用すると、オブジェクト初期化子内でゲッター関数を指定することができます。
この構文を使用して定義されたプロパティは、作成されたオブジェクトの自身のプロパティであり、設定可能かつ列挙可能です。
以下の例では latest 擬似プロパティをオブジェクト obj 作成し、 log 内の最後の配列アイテムを返します。
latest に値を代入しようとしても、変更はされないことに注意してください。
クラスインスタンスで利用できるパブリックインスタンスゲッターを定義する際にも、まったく同じ構文を使用することができます。クラス内では、メソッド間をカンマで区切る必要はありません。
ゲッタープロパティはクラスの prototype プロパティ上に定義されるため、そのクラスのすべてのインスタンスで共有されます。オブジェクトリテラル内のゲッタープロパティとは異なり、クラス内のゲッタープロパティは列挙可能ではありません。
静的ゲッターとプライベートゲッターはよく似た構文を使用することができます。これらは static およびプライベート要素のページで説明しています。
ゲッターを削除したい場合は、 delete を使用してください。
既存のオブジェクトに任意のタイミングでゲッターを追加するには、 Object.defineProperty() を使用してください。
ゲッターはオブジェクトのプロパティを定義する手段を提供しますが、アクセスされるまでプロパティの値を計算しません。ゲッターは値を計算するコストを、値が必要になるまで先送りします。値が必要でなければ、そのコストを負担しません。
プロパティの値の計算を先送りしたり後のアクセスのためにキャッシュするための付加的な最適化技術が、スマート(または メモ化)ゲッターです。初めてゲッターにアクセスされたときに、値を計算してキャッシュします。以降のアクセスでは再計算せずに、キャッシュした値を返します。これは次のような状況で役に立ちます。
メモ: 値が変わると見込まれるプロパティで、遅延ゲッターを使用してはいけません。ゲッターが遅延である場合、値を再計算しないためです。
なお、ゲッターの本質は「遅延」や「メモ化」ではありません。この動作を望む場合、この技術を実装する必要があります。
以下の例では、オブジェクトが自身のプロパティとしてゲッターを持っています。プロパティを取得すると、プロパティはオブジェクトから削除された後に再追加されますが、このとき暗黙的にデータプロパティとして追加されます。最終的に、値が返されます。
get キーワードと Object.defineProperty() の使用は似た結果になりますが、 Classes 上で使用する場合は微妙な違いがあります。
get を使用した場合は、プロパティはインスタンスのプロトタイプに定義されるのに対し、 Object.defineProperty() を使用した場合は、プロパティは適用されたインスタンスに定義されます。
| ECMAScript® 2027 Language Specification # sec-method-definitions |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。