オブジェクトの変更をトリガーになにかをしたいとき、愚直にsetterを書いたり、rxjsを使ったりすることが多かったですが、比較的簡単な書き方をご紹介します。
Proxyを使う
ビルトインオブジェクトのProxyは、オブジェクトのインターセプトを行うのに非常に便利なオブジェクトです。
試しに、オブジェクトに値が書き込まれたら、consoleにkeyとvalueを出力する、というプログラムを書いてみましょう。
const config = new Proxy({}, {
set(obj, prop, newval) {
console.log(`${prop}: ${newval}`);
obj[prop] = newval;
return true;
}
});
config.test = "Proxy Test !!"; // -> test: Proxy Test !!
setterに引っ掛けるだけで簡単に変更を検知し、処理を挿入することができました。もちろんgetも同様に検知することができます。
注意点
比較的新しいオブジェクトなので、ブラウザの対応状況には注意が必要です。とはいっても、互換性をご覧頂ければわかるとおり、InternetExplorerを未だにサポートするような要件でなければ、特に気にする必要はありません。
Safariが一部機能をサポートしていません(handler.getPrototypeOf
)が、こちらも特に問題はないでしょう。
まとめ
JavaScriptは特に、こういった新しいオブジェクトが日々生まれています。知っているだけでもかなり便利かつ簡単に使えるものが多いので、是非情報収集してみてください。