Object.prototype.__lookupGetter__()
Baseline Ограниченная доступность
Эта функция не является Baseline, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Устарело: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут по-прежнему поддерживать ее, она могла быть удалена из соответствующих веб-стандартов, находится в процессе удаления или оставлена только для целей совместимости. Избегайте ее использования и по возможности обновляйте существующий код; см. таблицу совместимости внизу этой страницы, чтобы помочь вам принять решение. Имейте в виду, что эта функция может перестать работать в любое время.
Примечание: Эта функция устарела в пользу API Object.getOwnPropertyDescriptor(). Поведение этого метода указано только для обеспечения совместимости с веб-браузерами, и его реализация не требуется ни на одной платформе. Он может работать не везде.
Метод __lookupGetter__() экземпляров Object возвращает функцию, привязанную в качестве геттера к указанному свойству.
Синтаксис
__lookupGetter__(prop)
Параметры
-
prop - Строка, содержащая имя свойства, геттер которого должен быть возвращен.
Возвращаемое значение
Функция, привязанная в качестве геттера к указанному свойству. Возвращает undefined, если такое свойство не найдено или свойство является свойством данных.
Описание
Все объекты, наследующие от Object.prototype (то есть, все, кроме объектов с прототипом null), наследуют метод __lookupGetter__(). Если для свойства объекта был определен геттер, невозможно сослаться на функцию геттера через это свойство, поскольку это свойство ссылается на возвращаемое значение этой функции. __lookupGetter__() можно использовать для получения ссылки на функцию геттера.
__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]
Поиск геттера свойства стандартным способом
Вам следует использовать API Object.getOwnPropertyDescriptor() для поиска геттера свойства. По сравнению с __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]
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
lookupGetter |
1 |
12 |
1 |
9.5 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
- Polyfill
Object.prototype.__lookupGetter__вcore-js Object.prototype.__lookupSetter__()getObject.getOwnPropertyDescriptor()Object.prototype.__defineGetter__()Object.prototype.__defineSetter__()- JS Guide: Определение геттеров и сеттеров
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__