Definition. 属性を定義するには、次のような対応する関数を使用する必要があります:
Object.defineProperty(obj, "prop", propDesc)
obj に独自の属性 prop がない場合、この関数の機能は、独自の属性 prop を obj に追加し、値
を割り当てることです。
パラメータ propDesc は、属性の特性 (書き込み可能性、列挙可能性など) を指定します。
obj がすでに独自の属性 prop を持っている場合、この関数の機能は、その属性値を含む既存の属性の特性を変更することです。
1. プロパティを定義します
var book = { _year: 2004, edition: 1 }; Object.defineProperty(book, "year", { get: function(){ return this._year; }, set: function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } }); book.year = 2005; alert(book.edition); //2
2. __defineSetter__ と __defineGetter__
var book = { _year: 2004, edition: 1 }; //legacy accessor support book.__defineGetter__("year", function(){ return this._year; }); book.__defineSetter__("year", function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } }); book.year = 2005; alert(book.edition); //2