3
get/setの動作を変更するJavaScriptプロパティをラップする機能があります。値である特性のためにObject.createを使用して作成されたJavaScriptプロパティの取得/設定メソッドへのアクセス
、私は、次の操作を行うことができます。
var obj = {
myProperty : 0
};
function notifyOfChange(obj, propertyName) {
var propertyValue = obj[propertyName];
Object.defineProperty(obj, propertyName, {
get : function() { return propertyValue; },
set : function(newValue) {
var propertyValue = newValue;
console.log("Message from notifyOfChange.");
}
});
};
obj.myProperty = 10; // outputs "Message from notifyOfChange."
しかし、何場合myPropertyにはすでにゲッター/セッターを持っていますか?
var obj = Object.create({}, {
myProperty : {
get : function() { return this._myProperty; },
set : function(value) {
console.log("Message from obj itself.");
this._myProperty = value;
},
configurable : true
}
});
obj.myProperty = 10; // outputs "Message from obj itself";
notifyOfChange(obj, "myProperty");
obj.myProperty = 10; // outputs "Message from notifyOfChange."
私はnotifyOfChangeでそれを呼び出すことができるようにmyPropertyに匿名セッターを検出する方法はありますか?
注:どのオブジェクトでもnotifyOfChangeを動作させたいので、 myPropertyセッター用の名前付き関数を使用するだけで動作しません。
if-状態で 'desc.writable'を使うのはなぜですか? – Bergi
書き込み可能なプロパティではない場合は、セッターを与えて書き込み可能にしたいとは思わないでしょう。 – kpozin
OK、私はエラーを投げる前に "通知"メッセージを記録しました:-) – Bergi