Object.prototype.__lookupGetter__()
已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已从相关的 Web 标准中删除,可能正在被删除过程中,或者可能仅出于兼容性目的而保留。避免使用它,并在可能的情况下更新现有代码;请参阅此页面底部的兼容性表以指导您的决策。请注意,此功能可能随时停止工作。
注意:此功能已弃用,取而代之的是Object.getOwnPropertyDescriptor()
API。此方法的行为仅针对 Web 兼容性指定,并且不需要在任何平台上实现。它可能并非在所有地方都能正常工作。
__lookupGetter__()
是 Object
实例的一种方法,它返回绑定到指定属性的 getter 函数。
语法
__lookupGetter__(prop)
参数
prop
-
包含应返回其 getter 的属性名称的字符串。
返回值
绑定到指定属性的函数。如果未找到此类属性,或者该属性是数据属性,则返回undefined
。
描述
所有从Object.prototype
继承的对象(即,除了null
原型对象之外的所有对象)都继承__lookupGetter__()
方法。如果已为对象的属性定义了getter,则无法通过该属性引用 getter 函数,因为该属性引用该函数的返回值。__lookupGetter__()
可用于获取对 getter 函数的引用。
__lookupGetter__()
沿着原型链向上查找指定的属性。如果原型链上的任何对象都具有指定的自身属性,则返回该属性的属性描述符的get
属性。如果该属性是数据属性,则返回undefined
。如果在整个原型链中都找不到该属性,则也会返回undefined
。
__lookupGetter__()
在规范中定义为“规范性可选”,这意味着不需要任何实现来实现它。但是,所有主要浏览器都实现了它,并且由于其持续使用,因此不太可能将其删除。如果浏览器实现了__lookupGetter__()
,它还需要实现__lookupSetter__()
、__defineGetter__()
和__defineSetter__()
方法。
示例
使用 __lookupGetter__()
const obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
};
obj.__lookupGetter__("foo");
// [Function: get foo]
以标准方式查找属性的 getter
您应该使用Object.getOwnPropertyDescriptor()
API 来查找属性的 getter。与__lookupGetter__()
相比,此方法允许查找符号属性。Object.getOwnPropertyDescriptor()
方法也适用于null
原型对象,它们不继承自Object.prototype
,因此没有__lookupGetter__()
方法。如果__lookupGetter__()
沿着原型链向上查找的行为很重要,您可以使用Object.getPrototypeOf()
自己实现它。
const obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
};
Object.getOwnPropertyDescriptor(obj, "foo").get;
// [Function: get foo]
const obj2 = {
__proto__: {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
},
};
function findGetter(obj, prop) {
while (obj) {
const desc = Object.getOwnPropertyDescriptor(obj, prop);
if (desc) {
return desc.get;
}
obj = Object.getPrototypeOf(obj);
}
}
console.log(findGetter(obj2, "foo")); // [Function: get foo]
规范
规范 |
---|
ECMAScript 语言规范 # sec-object.prototype.__lookupGetter__ |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。