人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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の仕様なんですか??



●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:AA JavaScript JSON 仕様
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● じゃっくそにっく
●60ポイント

こんにちは。

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

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のプログラミング言語としての

参照方式のルールです。



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

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

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

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

◎質問者からの返答

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


2 ● openseed
●10ポイント

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

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

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


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

HOGEHOGE.n(array[n])

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

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

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

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

または、

HOGEHOGE.test1(array[n]);

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ