Object.prototype.__defineSetter__()

この機能は非推奨となり、オブジェクト初期化子の構文または Object.defineProperty() API を使用してセッターを定義する方法で置き換えられました。

ただし、ウェブ上では広く実装および利用されているため、ブラウザーが実装をやめる可能性は極めて低いと考えられます。

__defineSetter__ メソッドは、オブジェクトのプロパティと関数を結び付け、そのプロパティを設定しようとすると呼び出されるようにします。

構文

obj.__defineSetter__(prop, fun)

引数

prop
関数と結びつけられたプロパティの名前を表す文字列です。
fun
プロパティへ値を設定しようとしたときに呼び出される関数です。この関数は以下の形式をとります。
function(val) { . . . }
val
An alias for the variable that holds the value attempted to be assigned to 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

標準準拠の方法

// Using the set operator
var o = { set value(val) { this.anotherValue = val; } };
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

// Using 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 (ECMA-262)
Object.prototype.__defineSetter__() の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
__defineSetter__
非推奨
Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1
補足
完全対応 1
補足
補足 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 完全対応 11Opera 完全対応 9.5Safari 完全対応 3WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 あり

凡例

完全対応  
完全対応
非推奨。新しいウェブサイトでは使用しないでください。
非推奨。新しいウェブサイトでは使用しないでください。
実装ノートを参照してください。
実装ノートを参照してください。

関連情報