Object.prototype.__defineGetter__()

非推奨: この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

メモ: この機能は非推奨となり、ゲッターオブジェクト初期化子の構文または Object.defineProperty() API を使用して定義する方法に置き換えられました。このメソッドの動作はウェブの互換性だけのために仕様化されたものであり、どのプラットフォームでも実装することを要求されているわけではありません。どこでも動作するとは限りません。

__defineGetter__()Object インスタンスのメソッドで、オブジェクトのプロパティと関数を結び付け、そのプロパティが参照されるときに呼び出されるようにします。

構文

js
__defineGetter__(prop, func)

引数

prop

ゲッター func をバインドするプロパティの名前を表す文字列です。

func

プロパティの値を参照するときに呼び出される関数です。

返値

なし (undefined)。

例外

TypeError

func が関数でない場合に発生します。

解説

Object.prototype 継承するすべてのオブジェクト(つまり、 null プロトタイプオブジェクトを除くすべてのオブジェクト)は __defineGetter__() メソッドを継承しています。このメソッドにより、既存のオブジェクトにゲッターを定義することができます。これは、 Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }) と等価であり、プロパティが列挙され、構成可能であり、既存のセッターが存在する場合は保存されることを意味しています。

__defineGetter__() は仕様書で normative optional と定義されており、これは実装することを要求されていないということです。しかし、主要なブラウザーはすべて実装していますし、使い続けられているため、除去される可能性は低いでしょう。ブラウザーが __defineGetter__() を実装する場合、__lookupGetter__()__lookupSetter__()__defineSetter__() の各メソッドも実装する必要があります。

__defineGetter__() の使用

js
const o = {};
o.__defineGetter__("gimmeFive", function () {
  return 5;
});
console.log(o.gimmeFive); // 5

標準の方法でゲッタープロパティを定義

get 構文を使用すると、オブジェクトが最初に初期化されたときにゲッターを定義することができます。

js
const o = {
  get gimmeFive() {
    return 5;
  },
};
console.log(o.gimmeFive); // 5

また、 Object.defineProperty() を使用して、オブジェクト作成後にそのオブジェクトにゲッターを定義することもできます。 __defineGetter__() と比較すると、このメソッドではシンボルのプロパティを定義するだけでなく、ゲッターの列挙可能性や構成可能性を制御することができます。 Object.defineProperty() メソッドは、 Object.prototype を継承していないため __defineGetter__() メソッドがない null プロトタイプオブジェクトでも動作します。

js
const o = {};
Object.defineProperty(o, "gimmeFive", {
  get() {
    return 5;
  },
  configurable: true,
  enumerable: true,
});
console.log(o.gimmeFive); // 5

仕様書

Specification
ECMAScript Language Specification
# sec-object.prototype.__defineGetter__

ブラウザーの互換性

BCD tables only load in the browser

関連情報