表示する数値を、startファンクション内の
freqの引数で渡された値にしたいのですが、
alertの表示はずっと、10000のままになってます。
もちろんstartファンクション内では
きちんと値は代入されています。
どうしたらいいんのでしょうか?
var HOGEHOGE ={
timer_interval:10000,
start:function start(freq){
if(freq > 0) {
HOGEHOGE.timer_interval = freq
}else{
HOGEHOGE.timer_interval = freq
}
}
alert(HOGEHOGE.timer_interval)
こんにちは。
<script type="text/javascript"> var HOGEHOGE ={ timer_interval:10000, start:function start(freq){ if(freq > 0) { HOGEHOGE.timer_interval = freq; }else{ HOGEHOGE.timer_interval = 0; } } } // テスト用コード // startを呼び出す HOGEHOGE.start(10); // timer_intervalをアラート alert(HOGEHOGE.timer_interval) </script>
これでいいかと思います
①"}"の閉じ忘れがありました。
②if(freq > 0)の処理わけで、
どっちに分岐しても同じになってしまっていたので、
マイナスのfreqが入ったら0にするよう修正しておきました。
///////////////////////////////////////////////////////////////////
今回のコードように、
「オブジェクト内のメンバ関数によって、
オブジェクト内のメンバ変数を変更する。」
という構造を持つものを使う場合、
JavaScriptのfunctionを応用した、
擬似クラスを使ったほうがよいです。
function クラス名() { // メンバ変数の定義 this.メンバ変数名 = 初期値; // メンバ変数の値を変更するメンバ関数の定義 this.メンバ関数名j = function (パラメータ値) { this.メンバ変数名 = パラメータ値; } // 必ずこれが必要 return (this); }
のようにクラスを定義し、
var インスタンス名 = クラス名();
という風にオブジェクトを生成します。
もちろん、コンストラクタに引数を持たせて、
独自の初期化をさせることも可能です。
<script type="text/javascript"> ///////////////////////////////////////////////// // // クラス CHogeHoge // function CHogeHoge (){ // メンバ変数 // this.に設定 this.timer_interval=1000; // メンバ関数 // this.に設定 this.start = function ( freq ) { if( freq >0) { // メンバ変数の変更 this.timer_interval = freq; } else { // メンバ変数の変更 this.timer_interval = 0; } } // 生成された自身を帰す return (this); } // CHogeHogeクラスのインスタンスを作成 var HOGEHOGE = CHogeHoge(); // テスト用コード // startを呼び出す HOGEHOGE.start(10); // timer_intervalをアラート alert(HOGEHOGE.timer_interval) </script>
ありがとうございますw