Object.prototype.__defineSetter__()

Не стандартно
Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.

Устарело
Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

Сводка

Метод __defineSetter__() привязывает свойство объекта к функции, вызываемой каждый раз при попытке установить значение этого свойства.

Синтаксис

obj.__defineSetter__(prop, fun)

Параметры

prop
Строка, содержащая имя свойства, привязываемого к заданной функции.
fun
Функция, вызываемая при попытке установить значение указанному свойству. Эта функция имеет вид:
function(val) { . . . }
val
Псевдоним переменной, содержащей значение, которое пытаются присвоить свойству prop.

Описание

Метод __defineSetter__() позволяет определять сеттер на уже существующем объекте.

Примеры

// Нестандартный и устаревший способ

var o = {};
o.__defineSetter__('value', function(val) { this.anotherValue = val; });
o.value = 5;
console.log(o.value);         // undefined
console.log(o.anotherValue);  // 5


// Способ, совместимый со стандартом

// Использование оператора set
var o = { set value(val) { this.anotherValue = val; } };
o.value = 5;
console.log(o.value);         // undefined
console.log(o.anotherValue);  // 5

// Использование метода Object.defineProperty()
var o = {};
Object.defineProperty(o, 'value', {
  set: function(val) {
    this.anotherValue = val;
  }
});
o.value = 5;
console.log(o.value);         // undefined
console.log(o.anotherValue);  // 5

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

Не является частью какой-либо спецификации.

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

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) 11 (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) ? (Да) (Да)

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

Метки документа и участники

 Внесли вклад в эту страницу: Mingun
 Обновлялась последний раз: Mingun,