Object.prototype.__defineGetter__()

已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已从相关的 Web 标准中删除,或者可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并在可能的情况下更新现有代码;请参阅本页底部的兼容性表来指导您的决策。请注意,此功能可能随时停止工作。

注意:此功能已弃用,取而代之的是使用getter定义对象初始化器语法Object.defineProperty() API。此方法的行为仅针对 Web 兼容性指定,并且不需要在任何平台上实现。它可能并非在所有地方都能正常工作。

__defineGetter__()Object实例的 Object方法,它将对象的属性绑定到一个函数,该函数在查找该属性时会被调用。

语法

js
__defineGetter__(prop, func)

参数

prop

包含 getter func 绑定的属性名称的字符串。

func

要绑定到指定属性查找的函数。

返回值

无(undefined)。

异常

TypeError

如果 func 不是函数,则抛出。

描述

所有继承自 Object.prototype 的对象(即,除了null原型对象之外的所有对象)都继承了 __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 的可枚举性和可配置性,以及定义符号属性。Object.defineProperty() 方法也适用于null原型对象,这些对象不继承自 Object.prototype,因此没有 __defineGetter__() 方法。

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

规范

规范
ECMAScript 语言规范
# sec-object.prototype.__defineGetter__

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅