を変更されているかどうかを確認する方法:オブジェクトが、私は、たとえば、オブジェクトを持っている
var o = {
a: 1
};
ユーザーが行います。
o.a = 2;
o
オブジェクトが変更された場合どのように知ることができますか?私はo
オブジェクトに触れることができないので、Object.defineProperties()
を使用することはできません。
を変更されているかどうかを確認する方法:オブジェクトが、私は、たとえば、オブジェクトを持っている
var o = {
a: 1
};
ユーザーが行います。
o.a = 2;
o
オブジェクトが変更された場合どのように知ることができますか?私はo
オブジェクトに触れることができないので、Object.defineProperties()
を使用することはできません。
var o_backup = o.a;
if(o.a != o_backup){
// function to execute
}
基本的に、あなただけのオブジェクトo
からa
を保存する変数を作成しているし、それが変更されたかどうあなたはチェックしています。
また、複数回変更されているかどうかをチェックする場合は、setInterval()
機能を使用できます。
違反はありませんが、これはあまり優雅な解決策ではありません。 – Trevor
あなたはNode.jsの環境であり、したがって、あなたがアクセサ関数とプロパティを定義するObject.defineProperty()
を使用することができます(すなわち、古いブラウザ)安っぽい古いJavaScriptエンジンを気にする必要はありませんので。これにより、特定のプロパティを読み書きするたびにカスタム関数を実行できるようになります。別のプロパティに格納します。値がo.a
に割り当てられているときはいつでも
var o = {};
Object.defineProperty(o, 'a', {
get: function() {
return this.__a;
},
set: function(value) {
this.__a = value;
this.__a_changed = true;
}
});
o.__a = 1;
は__a_changed
プロパティが設定されます。もちろん、set
関数では、変更の際に何をしたいのかを実行することがよりクリーンになりますが、あなたが有用な方法で行うことができるのは明らかにあなたのコードに依存します。
最初の答えと同じですが、私は 'o'オブジェクトに触れることができません。なぜなら、それはサードパーティのモジュールを持つ設定ファイルから作成されるからです。 –
すべてのプレーンプロパティをアクセサ上のプロパティに変換できます。 – ThiefMaster
最も簡単なことは、明らかに値が初期化した値と異なるかどうかを確認することです。もう一つの選択肢はObject.defineProperty
です。
var o = {};
var aValue = 2;
Object.defineProperty(o, "a", {
get: function() { return aValue; },
set: function(newValue) {
aValue = newValue;
// trigger event or set flag that it was changed
}
});
問題は、 'o'オブジェクトがサードパーティのモジュールを持つ設定ファイルから作成されているため、' o'オブジェクトに触れられないことです。 –
本当に 'o'オブジェクトに触れることができないと仮定すると、値を期待値と照らし合わせる以外に多くのオプションがないかもしれません。通常のオブジェクトがプロパティを変更したときに自動的にトリガされるイベントはありません。 –
defineProperty
があなたのために仕事をしていない場合は、常に独自のセッターゲッターとo
をラップすることができます。
var myO = {
o: o, // original o
changed: false,
set: function (prop, val) {
this.o[prop] = val;
this[prop + "IsChanged"] = true;
},
get: function (prop) {
return this.o[prop];
}
};
myO.set("a", 2);
console.log(myO.aIsChanged); // true
より良い解決策は、私がFYI、ここUnderscore
ライブラリのextend
メソッドを使用していmyO.on("change", function() { ... })
var myO = {
o: o, // original o
changed: false,
set: function (prop, val) {
this.o[prop] = val;
this.trigger("change", prop, val);
},
get: function (prop) {
return this.o[prop];
}
};
_.extend(myO, Backbone.events);
myO.on("change", function (prop, val) {
// Do stuff with the change
});
myO.set("a", 1);
いろいろ書いをexeuteするBackbone.Events
のようなものを使用してイベントを実行することです。
変更があったときに通知を受け取るか、確認する方法がありますか?チェックしたいだけの場合は、オブジェクトのハッシュコードを生成し、必要に応じて比較すると言うでしょう。 – Nic
これをチェックする方法はありますが、このハッシュをどのように生成できますか? –