Object.prototype.__defineGetter__()
已弃用: 不再推荐使用该特性。虽然一些浏览器仍然支持它,但也许已从相关的 web 标准中移除,也许正准备移除或出于兼容性而保留。请尽量不要使用该特性,并更新现有的代码;参见本页面底部的兼容性表格以指导你作出决定。请注意,该特性随时可能无法正常工作。
备注:此特性已弃用,建议使用对象初始化语法或 Object.defineProperty()
API 来定义 getter。该方法的行为只针对 Web 兼容性进行了规定,在任何平台上都不需要实现该方法。它可能无法在所有地方正常工作。
__defineGetter__()
方法将一个对象的属性绑定到一个函数上,当该属性被访问时,该函数将被调用。
语法
__defineGetter__(prop, func)
参数
返回值
异常
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 的可枚举性和可配置性,以及定义 Symbol 属性。Object.defineProperty()
方法也适用于 null
原型对象,因为他们没有继承 Object.prototype
,所以没有 __defineGetter__()
方法。
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