自分で新しく定義したオブジェクトを生成する時に、プロパティとして関数を渡し、コンストラクタでプロパティとして持たせたいです。
下記のようなコードを書いたのですが、2つうまくいきません。
実際のコード
// 1. 最終的に実行したい関数 function myFunc(myArg){ alert("executed " + myArg); } // 2. MyObjectオブジェクトのコンストラクター MyObject = function(func){ console.log(func); // 1つ目: undefinedと表示されてしまう。(3で実行される) this.func_as_property = func; } // 3. MyObjectインスタンスの生成 var obj = new MyObject(myFunc("arg")); // 2つ目: ここで関数が実行されてしまう。 // 4. MyObjectのexecメソッドを定義 MyObject.prototype.exec = function(){ this.func_as_property(); } // 5. execメソッドからmyFunc()を実行 obj.exec();
問題点
- 1つ目はオブジェクトのプロパティとして渡したはずの関数が渡されておらず、console.logで表示してみてもundefinedと表示されてしまう
- 2つ目はプロパティとして渡したくてそこに書いているので実行して欲しくないが渡そうとするタイミングで関数が実行されてしまう
お聞きしたいこと
- オブジェクトのコンストラクタに引数としてどうやって関数を渡すか
- インスタンス生成時に引数に指定した関数をその場で実行してしまわないようにするにはどうすればいいか
2点です。よろしくお願いします。
引数,プロパティ,オブジェクト,インスタンスなど、言葉の使い方が間違っていたら申し訳ないです。
実際にやりたいこと(読んでもらう必要はないです)
フレームワークは使わずに、jsで簡単なクリッカー系放置ゲームを作っています。
このようなゲームをプレイしたことのある方はわかると思いますが、アップグレード系のアイテムがあり、毎秒の生産を2倍や10倍にしたり、1クリックあたりの生産を毎秒あたりの自動生産の3%増やす、などとても多種多様な効果を持つ事になります。
なのでアップグレードの効果関数をオブジェクトのプロパティとして持ち、アップグレードが購入されたタイミングで実行したいです。
色々他の方法も考えられますが、なんとなくこの方法がスマートかなと思いました。他にどんな方法が考えられるか、いい方法を知っている方、思いついた方、本来の質問に答えてもらわなくても結構なので、ぜひ教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/10 16:13
退会済みユーザー
2017/06/10 16:21