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__

浏览器兼容性

另见