Object.prototype.__defineGetter__()

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

注意: 此功能已棄用,請改用 getter物件字面量語法Object.defineProperty() API 定義 getter。此方法的行為僅為網頁相容性而指定,平臺上不要求實現。它可能無法在所有地方正常工作。

__defineGetter__() 方法是 Object 例項上用於將物件的屬性繫結到查詢該屬性時要呼叫的函式。

語法

js
__defineGetter__(prop, func)

引數

prop

包含 getter func 所繫結屬性名稱的字串。

func

要繫結到指定屬性查詢的函式。

返回值

無(undefined)。

異常

TypeError

如果 func 不是函式,則丟擲此錯誤。

描述

所有繼承自 Object.prototype 的物件(即除 null-prototype 物件之外的所有物件)都繼承了 __defineGetter__() 方法。此方法允許在現有物件上定義 getter。這等同於 Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }),這意味著該屬性是可列舉和可配置的,並且會保留任何現有的 setter(如果存在)。

__defineGetter__() 在規範中被定義為“規範可選”,這意味著不需要實現。然而,所有主流瀏覽器都實現了它,並且由於其持續的使用,不太可能被移除。如果瀏覽器實現了 __defineGetter__(),那麼它也需要實現 __lookupGetter__()__lookupSetter__()__defineSetter__() 方法。

示例

使用 __defineGetter__()

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

以標準方式定義 getter 屬性

在物件首次初始化時,可以使用 get 語法來定義 getter。

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

您還可以使用 Object.defineProperty() 在物件建立後為其定義 getter。與 __defineGetter__() 相比,此方法允許您控制 getter 的可列舉性和可配置性,以及定義 symbol 屬性。Object.defineProperty() 方法也適用於 null-prototype 物件,這些物件不繼承自 Object.prototype,因此沒有 __defineGetter__() 方法。

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

規範

規範
ECMAScript® 2026 語言規範
# sec-object.prototype.__defineGetter__

瀏覽器相容性

另見