Object.prototype.__defineSetter__()

Ця функціональність не рекомендована до використання на користь синтаксису ініціалізації об'єктів або API Object.defineProperty().

Однак, оскільки вона широко використовується у Всесвітній мережі, дуже малоймовірно, що веб-переглядачі припинять її підтримку.

Метод __defineSetter__  прив'язує властивість об'єкта до функції, яка викликатиметься під час спроби присвоїти значення цієї властивості.

Синтаксис

obj.__defineSetter__(prop, fun)

Параметри

prop
Рядок, що містить ім'я властивості, яка буде прив'язана до наданої функції.
fun
Функція, що викликатиметься при спробі присвоїти значення вказаної властивості. Ця функція має форму
function(val) { . . . }
val
Псевдонім змінної, яка містить значення для присвоєння prop.

Значення, що повертається

undefined.

Опис

Метод __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

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

Специфікація Статус Коментар
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.prototype.__defineSetter__()' in that specification.
Draft Включено у (нормативний) додаток для додаткової legacy-функціональності ECMAScript для веб-переглядачів (зауважте, що специфікація кодифікує те, що вже реалізовано).

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
__defineSetter__
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1
Notes
Full support 1
Notes
Notes Starting with Firefox 48, this method can no longer be called at the global scope without any object. A TypeError will be thrown otherwise. Previously, the global object was used in these cases automatically, but this is no longer the case.
IE Full support 11Opera Full support YesSafari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.
See implementation notes.
See implementation notes.

Див. також