Object.prototype.__defineSetter__()

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

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

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

構文

js
__defineSetter__(prop, fun);

引数

prop

関数と結びつけられたプロパティの名前を表す文字列です。

fun

プロパティへ値を設定しようとしたときに呼び出される関数です。この関数は以下の形式をとります。

js
function(val) { . . . }
val

prop へ代入しようとする値を保持する変数の別名です。

返値

undefined です。

解説

__defineSetter__ メソッドにより、既存のオブジェクトにセッターを定義することができます。

標準外かつ非推奨の方法

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

標準準拠の方法

js
// 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

仕様書

Specification
ECMAScript Language Specification
# sec-object.prototype.__defineSetter__

ブラウザーの互換性

BCD tables only load in the browser

関連情報