2016-07-11 24 views
-1

Ich habe den folgenden Code in einer JS-Datei:Warum funktioniert diese Schließung nicht?

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); 

Und in der HTML-Datei Code, der die SeleccionInicial Funktion aufruft:

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

aber wenn ich versuche, SeleccionInicial zu nennen, ich Get ein SeleccionInicial ist kein Funktionsfehler! Warum ist SeleccionInicial ein Verschluss?

+5

'this' ist nicht das, was Sie denken, es ist. – SLaks

+1

Sie möchten eine Instanz mit 'new ElegirRegion()' erstellen, andernfalls bezieht sich 'this' auf das globale Fenster und nicht auf'ElegrRegion'. –

+0

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

Antwort

1

In Ihrem Code verwenden Sie this, als ob es sich auf ElegirRegion bezieht. Aber das passiert nicht.

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>

Der einzige Weg, was passieren würde, wenn Sie diese Funktion als Konstruktor Behandlung wurden (ElegirRegion = new ...). Wenn Sie stattdessen eine Methode zu ElegirRegion hinzufügen möchten, referenzieren Sie diese direkt.

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

Warum der Downvote? Wenn etwas unklar oder ungenau ist, möchte ich es beheben. –

+0

Danke! Das war in der Tat das Problem. – Magnus

Verwandte Themen