Spec-Zone.ru › JavaScript

Object.prototype.__lookupSetter__()

Базовый уровень Ограниченная доступность

Эта функция не является базовой, потому что она не работает в некоторых из наиболее широко используемых браузеров.

Устаревший: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут всё ещё поддерживать её, она, возможно, уже была удалена из соответствующих веб-стандартов, находится в процессе удаления или сохранена только в целях совместимости. Избегайте её использования и обновите существующий код, если это возможно; см. таблицу совместимости в нижней части этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.

Примечание: Эта функция является устаревшей в пользу API Object.getOwnPropertyDescriptor(). Поведение этого метода указано только для веб-совместимости и не обязательно для реализации на любой платформе. Он может работать не везде.

Метод __lookupSetter__() экземпляров Object возвращает функцию, привязанную в качестве сеттера к указанному свойству.

Синтаксис

__lookupSetter__(prop)

Параметры

prop
Строка, содержащая имя свойства, чей сеттер должен быть возвращен.

Возвращаемое значение

Функция, привязанная в качестве сеттера к указанному свойству. Возвращает undefined, если такое свойство не найдено, или если свойство является свойством данных.

Описание

Все объекты, которые наследуются от Object.prototype (то есть все, кроме объектов с null-прототипом), наследуют метод __lookupSetter__(). Если для свойства объекта был определён сеттер, невозможно получить ссылку на функцию-сеттер через это свойство, потому что это свойство вызывает функцию только при его установке. __lookupSetter__() может использоваться для получения ссылки на функцию-сеттер.

__lookupSetter__() проходит вверх по цепочке прототипов, чтобы найти указанное свойство. Если какой-либо объект вдоль цепочки прототипов имеет указанное собственное свойство, возвращается атрибут set дескриптора свойства для этого свойства. Если это свойство является свойством данных, возвращается undefined. Если свойство не найдено по всей цепочке прототипов, также возвращается undefined.

__lookupSetter__() определен в спецификации как "normative optional", что означает, что ни одна реализация не обязана его реализовывать. Однако все основные браузеры реализуют его, и благодаря его продолжающемуся использованию, маловероятно, что он будет удален. Если браузер реализует __lookupSetter__(), ему также необходимо реализовать методы __lookupGetter__(), __defineGetter__() и __defineSetter__().

Примеры

Использование __lookupSetter__()

const obj = {
  set foo(value) {
    this.bar = value;
  },
};

obj.__lookupSetter__("foo");
// [Function: set foo]

Поиск сеттера свойства стандартным способом

Вам следует использовать API Object.getOwnPropertyDescriptor() для поиска сеттера свойства. По сравнению с __lookupSetter__(), этот метод позволяет искать свойства-символы. Метод Object.getOwnPropertyDescriptor() также работает с объектами с null-прототипом, которые не наследуются от Object.prototype и, следовательно, не имеют метода __lookupSetter__(). Если поведение __lookupSetter__() по прохождению вверх по цепочке прототипов важно, вы можете реализовать его самостоятельно с помощью Object.getPrototypeOf().

const obj = {
  set foo(value) {
    this.bar = value;
  },
};

Object.getOwnPropertyDescriptor(obj, "foo").set;
// [Function: set foo]
const obj2 = {
  __proto__: {
    set foo(value) {
      this.bar = value;
    },
  },
};

function findSetter(obj, prop) {
  while (obj) {
    const desc = Object.getOwnPropertyDescriptor(obj, prop);
    if (desc) {
      return desc.set;
    }
    obj = Object.getPrototypeOf(obj);
  }
}

console.log(findSetter(obj2, "foo")); // [Function: set foo]

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-object.prototype.__lookupSetter__

Совместимость с браузерами

Настольные Мобильные Серверные
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
lookupSetter
1
12
1
9.5
3
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

Смотрите также

  • Полифил Object.prototype.__lookupSetter__ в core-js
  • Object.prototype.__lookupGetter__()
  • set
  • Object.getOwnPropertyDescriptor()
  • Object.prototype.__defineGetter__()
  • Object.prototype.__defineSetter__()
  • Руководство JS: Определение геттеров и сеттеров

© 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/__lookupSetter__

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API