2016-07-11 8 views
-1

私は.jsファイルに次のコードがあります:私はSeleccionInicialを呼び出すしようとすると、私は、しかし、なぜこのクロージャーが機能しないのですか?

$(window).load(function(){ 
    ElegirRegion.SeleccionInicial(); 
}); 

ElegirRegion = function() { 
    var pagina = $('#pagina').val(); 
    carousel.setPaginaActual(pagina); 
    var x1 = $('#x1').val(); 
    var y1 = $('#y1').val(); 
    var x2 = $('#x2').val(); 
    var y2 = $('#y2').val(); 
    this.SeleccionInicial = function() { 
     if (!(x1 == 0 && x2 == 0 && y1 == 0 && y2 == 0)) { 
      var ias = $('img.imagen').eq(pagina).imgAreaSelect({ instance: true }); 
      ias.setSelection(x1, y1, x2, y2); 
      ias.setOptions({ show: true }); 
      ias.update(); 
     } 
    } 
    //more stuff 
} 
$(document).ready(ElegirRegion); 

そしてSeleccionInicial関数を呼び出すの.htmlファイルのコード内をSeleccionInicialは関数エラーではありません! SeleccionInicialはなぜ閉鎖されないのですか?

+5

'this'あなたはそれだと思うものではありません。 – SLaks

+1

'new ElegirRegion()'を使用してインスタンスを作成したい場合は、 'this'は' ElegirRegion'ではなくグローバルウィンドウを参照します。 –

+0

http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html – Hogan

答えて

1

thisElegirRegionのようにコードを使用しています。しかし、それは起こっていることではありません。

ElegirRegion = function() { 
 
    console.log(this === ElegirRegion); 
 
    console.log(this.toString()); 
 
    console.log(this === document); 
 
}; 
 

 
$(document).ready(ElegirRegion);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

あなたはコンストラクタ(ElegirRegion = new ...)として、その関数を処理してたらどうなる唯一の方法です。代わりに、ElegirRegionにメソッドを追加する場合は、それを直接参照してください。

ElegirRegion = function() { 
 
    ElegirRegion.SeleccionInicial = function() { 
 
    console.log('start'); 
 
    }; 
 
}; 
 

 
$(document).ready(ElegirRegion); 
 

 
$(window).load(function() { 
 
    ElegirRegion.SeleccionInicial(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

なぜdownvote?不明確または不正確なものがあれば、修正したいと思います。 –

+0

ありがとう!それは確かに問題でした。 – Magnus

関連する問題