Spec-Zone.ru › JavaScript

Object.prototype.__defineGetter__()

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

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

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

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

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

Синтаксис

__defineGetter__(prop, func)

Параметры

prop
Строка, содержащая имя свойства, с которым связан геттер func.
func
Функция, которая будет связана с обращением к указанному свойству.

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

Ничего (undefined).

Исключения

TypeError
Выбрасывается, если func не является функцией.

Описание

Все объекты, которые наследуются от Object.prototype (то есть все, кроме объектов без прототипа null), наследуют метод __defineGetter__(). Этот метод позволяет определить геттер для уже существующего объекта. Это эквивалентно Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }), что означает, что свойство является перечисляемым и конфигурируемым, и любой существующий сеттер, если он есть, сохраняется.

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

Примеры

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

const o = {};
o.__defineGetter__("gimmeFive", function () {
  return 5;
});
console.log(o.gimmeFive); // 5

Определение свойства геттера стандартными способами

Вы можете использовать синтаксис get для определения геттера при первой инициализации объекта.

const o = {
  get gimmeFive() {
    return 5;
  },
};
console.log(o.gimmeFive); // 5

Вы также можете использовать Object.defineProperty() для определения геттера в объекте после его создания. По сравнению с __defineGetter__(), этот метод позволяет вам контролировать перечисляемость и конфигурируемость геттера, а также определять свойства символов. Метод 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® 2027
# sec-object.prototype.__defineGetter__

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

Десктопные Мобильные Серверные
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
defineGetter
1
12
1Начиная с Firefox 48, этот метод больше не может быть вызван в глобальной области видимости без какого-либо объекта. В противном случае будет выброшено TypeError. Ранее в таких случаях автоматически использовался глобальный объект, но теперь это не так.
9.5
3
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

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

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

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

Spec-Zone.ru

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