質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.33%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

18929閲覧

JavaScript 変数の値の変化で実行される関数の作り方

allll

総合スコア42

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

2グッド

5クリップ

投稿2016/02/08 01:09

編集2016/02/08 01:37

JavaScriptで、varで宣言された変数の値が
falseからTrueに変わったら実行される関数の作り方を探しております。
変数を監視しているようなものと言ったら良いのでしょうか。

【背景】
ソースコードに対する単体検証用テストベンチを作成しているのですが
変数の値の変化をトリガとして使いたいと考えています。

ご存知の方いらっしゃいましたら、よろしくお願い致します。

.--, Snsk👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Object.definePropertysetter を作成してみてはどうでしょうか。

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

think49

総合スコア18189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

allll

2016/02/08 08:28

ご回答いただき、ありがとうございました! 提案頂いた内容で無事、動作確認ができ助かりました^^ また何かありましたら、よろしくお願いします。
guest

0

全体像が見えてないのでピンポイントでこれというものは無いのですが、ライブラリは自由に選べる変数の作りは自由に出来るという前提であれば、 Polymer/observe-js を使うとすっきり書けそうな気がします。

手前味噌ですが、以前書いた記事をどうぞ。 observe-jsを利用して分かりやすく非同期のFIFOを実装してみる

投稿2016/02/08 01:25

nobuhito

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

allll

2016/02/08 01:36

さっそくご回答頂き、ありがとうございます。 記事を拝見したところ >現時点でサポートしているブラウザはChrome36以上のみ ということなのですが、検証環境がIEとなっておりますので こちらの回答では難しそうです。申し訳ありません。 単純にvarで宣言された変数の値の変化をとりたいと考えております。 もし何かご存知でしたら、よろしくお願いします。
nobuhito

2016/02/08 01:40

ネイティブなものはChrome36以上ですが、Polymer/observe-jsを使うと他のブラウザでも同じ動作をさせることが出来るというものです。変数単独となると対応出来ませんが。 あとは setTimeout でこまめにチェックするかですかね?
guest

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
GreenOglin

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

allll

2016/02/08 08:37

ご回答いただき、ありがとうございます。 確かに、この方法でも可能ですね!勉強になりました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.33%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問