以下のソースで、最後のalert(HOGEHOGE.timer_interval)で

表示する数値を、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)

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/06/04 15:53:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:jack_sonic No.1

回答回数124ベストアンサー獲得回数25

ポイント60pt

こんにちは。

修正コード

<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を使って個別のメンバを操作することができます。
  • 最後にreturn(this)をすることで、インスタンス生成の役割をします。
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>
id:hopefully

ありがとうございますw

2007/06/04 15:52:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません