2017-03-14 6 views
0

変数への参照に奇妙な問題があります。私のセットアップは以下の通りです: javascript変数undefined(範囲外)

var pattern = {/* some object with patterns */}; 

var view = (new function() { 

    this.create_single = function(response) { 
     pattern.block // this returns pattern object correctly 
    }; 

    this.create_multi = function(response) { 
     pattern.multi_block // this returns pattern as undefined 
    }; 

}()); 

var data = (new function() { 

    this.acquisition = function(response) { 
     view.create_single(response); 
     view.create_multi(response); 
    }; 

}()); 

だから create_multiメソッドパターン変数に undefinedを返し、なぜその出来事私は任意の手掛かりを持っていません。 Adobe Dreamweaver(私はコードを書くために使用しています)には、私は 'pattern' used out of scopeという行のエラーがあります。誰が私に何が起こっているのか理解するのを助けることができる?

は、すべての協力いただきありがとうございます;)

+1

パターンオブジェクト内に 'multi_block'プロパティがありますか? – Weedoze

+0

はい、そこに定義されていますが、問題は 'pattern'自体が' multi_block'プロパティではなく 'undefined'です。 – Mevia

答えて

1

を渡すパラメータなしで、このいずれかを試してみてください。次のシナリオでうまくいきます:

var pattern = { 
    block: 1, 
    multi_block: 2 
}; 

var view = (new function() { 

    this.create_single = function(response) { 
     return pattern.block // this returns pattern object correctly 
    }; 

    this.create_multi = function(response) { 
     return pattern.multi_block // this returns pattern as undefined 
    }; 


}()); 
0

をあなたのアプローチは大丈夫ではありませんが、あなたの 'ビュー' メソッドの返す何も

var pattern = {multi_block:"mblock", block:"block" }; 
 

 
var view = (function() { 
 
    var create_single = function(response) { 
 
     return pattern.block // this returns pattern object correctly 
 
    }; 
 
    
 
    var create_multi = function(response) { 
 
    return pattern.multi_block // this returns pattern as undefined 
 
    }; 
 
    return create_single; 
 
}()); 
 

 
console.log(view);

+0

これは明らかに機能しますが、オブジェクト全体を関数のパラメータとして渡すことはできませんでした。渡す必要はありません。私はここでより複雑な問題をデバッグしようとしています。 – Mevia

+0

私はこの問題が以前のスタックのローカル変数が見えない新しいオブジェクトスタックを作成しているかもしれないキーワード 'new'であると考えています – IsuruKusumal

+0

コードをもう一度読むと、' pattern'が ' create_single'メソッドを使用すると、なぜ 'create_multi'ではそれを利用できなくなるのでしょうか?あなたのコードから – Mevia