JavaScriptで、varで宣言された変数の値が
falseからTrueに変わったら実行される関数の作り方を探しております。
変数を監視しているようなものと言ったら良いのでしょうか。
【背景】
ソースコードに対する単体検証用テストベンチを作成しているのですが
変数の値の変化をトリガとして使いたいと考えています。
ご存知の方いらっしゃいましたら、よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
Object.defineProperty
で setter
を作成してみてはどうでしょうか。
JavaScript
1'use strict'; 2(function () { 3 var sample = (function (Object, Boolean) { 4 var sample = Object.create(null), 5 flag = false; 6 7 Object.defineProperty(sample, 'flag', { 8 set: function set (value) { 9 value = Boolean(value); 10 11 if (value !== flag) { 12 console.log(flag + ' -> ' + value); 13 flag = value; 14 } 15 }, 16 get: function get () { 17 return flag; 18 } 19 }); 20 21 return sample; 22 }(Object, Boolean)); 23 24 console.log(sample.flag); // false 25 sample.flag = false; 26 sample.flag = true; // false -> true 27 sample.flag = false; // true -> false 28}());
Re: utog さん
投稿2016/02/08 02:22
総合スコア18189
0
全体像が見えてないのでピンポイントでこれというものは無いのですが、ライブラリは自由に選べる変数の作りは自由に出来るという前提であれば、 Polymer/observe-js を使うとすっきり書けそうな気がします。
手前味噌ですが、以前書いた記事をどうぞ。 observe-jsを利用して分かりやすく非同期のFIFOを実装してみる
投稿2016/02/08 01:25
総合スコア146
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/08 01:40
0
以下のような形だといかがでしょうか?
javascript
1(function(){ 2 var target = false; 3 4 // targetを監視してtrueになったら関数を実行 5 (function observe(){ 6 if (target == false) { 7 setTimeout(observe, 1); 8 } else { 9 // 関数実行 10 execute(); 11 } 12 })(); 13 14 // trueになったら実行する処理 15 function execute(){ 16 console.log("実行"); 17 } 18 19 // 試しに5秒後にtargetをtrueにしてみる 20 setTimeout(function(){ 21 target = true; 22 }, 5000); 23})();
投稿2016/02/08 06:02
編集2016/02/08 06:13総合スコア13
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/08 08:28