Object.prototype.__defineGetter__()
已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已从相关的 Web 标准中删除,或者可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并在可能的情况下更新现有代码;请参阅本页底部的兼容性表来指导您的决策。请注意,此功能可能随时停止工作。
注意:此功能已弃用,取而代之的是使用getter定义对象初始化器语法或Object.defineProperty()
API。此方法的行为仅针对 Web 兼容性指定,并且不需要在任何平台上实现。它可能并非在所有地方都能正常工作。
__defineGetter__()
是Object
实例的 Object
方法,它将对象的属性绑定到一个函数,该函数在查找该属性时会被调用。
语法
__defineGetter__(prop, 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__()
const o = {};
o.__defineGetter__("gimmeFive", function () {
return 5;
});
console.log(o.gimmeFive); // 5
以标准方式定义 getter 属性
在首次初始化对象时,可以使用 get
语法定义 getter。
const o = {
get gimmeFive() {
return 5;
},
};
console.log(o.gimmeFive); // 5
您也可以使用Object.defineProperty()
在对象创建后在其上定义 getter。与 __defineGetter__()
相比,此方法允许您控制 getter 的可枚举性和可配置性,以及定义符号属性。Object.defineProperty()
方法也适用于null
原型对象,这些对象不继承自 Object.prototype
,因此没有 __defineGetter__()
方法。
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 的浏览器中加载。