これにより標準APIだけでデータ・バインディングが可能になります。データ・バインディングは、例えば、アプリの「設定」が変更された場合などに効率的に設定データをアプリに反映したいときなどに利用されます。これが標準APIとして利用できるようになったということは、ソースコードがシンプルになるという他にも、無駄なポーリングをする必要がなくなるのでパフォーマンスが改善されるというメリットもあります。
以下は Object.observe() を使ったサンプルコードです。
var model = {}; Object.observe(model, function(changes) { changes.forEach(function(change) { console.log("type: " + change.type + ", " + "name: " + change.name + ", " + "oldValue: " + change.oldValue); }); }); // test model.a = "hoge"; model.a = "foo"; delete model.a; model.b = "bar"; model.b = "baz"; delete model.b; /* log type: add, name: a, oldValue: undefined type: update, name: a, oldValue: hoge type: delete, name: a, oldValue: foo type: add, name: b, oldValue: undefined type: update, name: b, oldValue: bar type: delete, name: b, oldValue: baz */
change.type には変更タイプ(add, update, delete)、 change.name には変更されたプロパティ名、 change.oldValue には変更前の値が入ります。
2016/04/23追記:
最近ChromeでObject.observeを使っていると以下の警告が出るようになりました。
'Object.observe' is deprecated and will be removed in M50, around April 2016. See https://www.chromestatus.com/features/6147094632988672 for more details.これはObject.observeが今月あたりにChrome(M50〜)の標準から外されるという警告みたいです。マジですか・・・個人的には少し残念です。。。
すでにObject.observeを利用している場合はobject-observeのような外部ライブラリを使って回避する必要があります。まあ
<script src="object-observe.js"></script>
するだけでいいのは救いですけどね。
0 件のコメント:
コメントを投稿