JSONで書いているのですが

var HOGEHGE ={
aa:function(array){
for (n in array) {
if(n == "test1"){
HOGEHOGE.n(array[n])
}
},
test1:function(result){
alert("111111111")
}
}
という風には動かないんでしょうか?

test1をnに変えたら動くのですが、
これはjavascriptの仕様なんですか??

回答の条件
  • 1人5回まで
  • 登録:2007/05/31 16:34:19
  • 終了:2007/05/31 19:58:10

回答(2件)

id:jack_sonic No.1

じゃっくそにっく回答回数123ベストアンサー獲得回数252007/05/31 17:59:21

ポイント60pt

こんにちは。

インデントをかけてソース引用いたします。

var HOGEHGE =
{
	aa:function(array){
		for (n in array) {
			if(n == "test1"){
				HOGEHOGE.n(array[n])
			}
		},
	test1:function(result){
		alert("111111111")
	}
}

このようになっていますが、

1.誤字がありました。

「var HOGEHGE」のスペル違い、

aa:functionの「}」の閉じ忘れなどです。

修正後のソースで修正しました。

2.メンバの参照方法が間違っているため、変更が必要です。

ソースの中で、

	if(n == "test1"){
		HOGEHOGE.n(array[n])
	}

としていますが、

このときの「n」は、文字列「"test1"」を格納した変数であり、

「.」(ドット演算子)であらわす「HOGEHOGE.n」とは別物になります。

「.」(ドット演算子)で結合した名前を使う場合、

「n」という変数の中身("test1")

を参照しようとするのではなく、

HOGEHOGEのnというメンバ

すなわち、

HOGEHOGE.n」の中身を参照しにいきます。

ですから、

nの中に入っている文字列"test1"でHOGEHOGE.test1()を呼び出したい場合、

HOGEHOGE.n()

で呼び出すのではなく、

[]演算子を使って、

HOGEHOGE.[n]

というかたちで呼び出します

修正後のソース
var HOGEHOGE =
{
	aa:function(array){
		for (n in array) {
			// キーがtest1のときだけ呼び出す
			if(n == "test1"){
				// []演算子で呼び出す
				HOGEHOGE[n](array[n])
			}
		}
	},
	test1:function(result){
		alert("111111111")
	}
}
// test1キーを含む連想配列作成
ar = {"test1":"テスト","bb":"2" };
// テスト呼び出し
HOGEHOGE.aa( ar );

このようにすれば呼び出せます。

JSOnではなく、JavaScriptのプログラミング言語としての

参照方式のルールです。



(追伸:以前の回答の後にご連絡頂いたメールが

メールシステム誤動作でうまく受信されておらず、

昨日受返信いたしまし。遅れてしまい

すみませんでした。ご確認ください)

id:hopefully

すいません。ありがとうございますw

2007/05/31 19:57:52
id:openseed No.2

openseed回答回数51ベストアンサー獲得回数62007/05/31 17:17:07

ポイント10pt

これって、動くんですか?

{} の数があっていないような・・・。

実際に、どのように起動しているのでしょうか?


なんとなく、やりたいことがわかりました。

HOGEHOGE.n(array[n])

var func = HOGEHOGE{n};
func(array[n])

だったら、動くのではないでしょうか。

これは、仕様だとおもいます。

HOGEHOGE{"test1"}(array[n]);

または、

HOGEHOGE.test1(array[n]);

というように、呼び出してあげる必要があります。

※ HOGEHOGE.n という、メンバは登録されていないはずです。

  • id:openseed
    既に解決ずみと思いますが、念のため訂正します。
    JavaScriptで連想配列に、アクセスするのは、{} ではなく、[] の間違えでして。失礼しました。

    その1
    誤:var func = HOGEHOGE{n};
    正:var func = HOGEHOGE[n];

    その2
    誤:HOGEHOGE{"test1"}(array[n]);
    正:HOGEHOGE["test1"](array[n]);

    です。訂正まで。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません