Object.prototype.__defineSetter__()
警告: この機能は非推奨となり、オブジェクト初期化子の構文または Object.defineProperty()
API を使用してセッターを定義する方法で置き換えられました。
ただし、ウェブ上では広く実装され利用されているため、ブラウザーが実装をやめる可能性は極めて低いと考えられます。
__defineSetter__
メソッドは、オブジェクトのプロパティと関数を結び付け、そのプロパティを設定しようとすると呼び出されるようにします。
構文
__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
仕様書
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.__defineSetter__ |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
Object.prototype.__defineSetter__
のポリフィルはcore-js
で利用できます。Object.prototype.__defineGetter__()
set
演算子Object.defineProperty()
Object.prototype.__lookupGetter__()
Object.prototype.__lookupSetter__()
- JavaScript ガイド: ゲッターとセッターの定義
- [Blog Post] Deprecation of __defineGetter__ and __defineSetter__
- Firefox バグ 647423