2016-06-21 3 views
-3

Mit RequireJS, innerhalb eines Moduls, kann ich this verwenden, um auf das Modul selbst zu verweisen?
heißtVerwendung von 'this' in einem requireJS Modul

define(function() { 
    var $el; 
    function init($el) { 
    this.$el = $el // How can 'this.$el' refer to the $el above? 
    } 
    return { 
    init: init; 
} 
}); 

Ich habe versucht call mit init zu nennen. d.h.

require(["mymodule"], function(mymodule) { 
    mymodule.init.call(mymodule); 
}); 

this aber innerhalb des Moduls bezieht sich nur auf die window still.

Gibt es eine Möglichkeit, this Verhalten mehr wie in anderen Sprachen, d. H. Es bezieht sich auf den umschließenden Bereich?

Im Moment muss ich die Modulvariablen vorfixieren, was hässlich ist. heißt

define(function() { 
     var m_$el; 
     function init($el) { 
     m_$el = $el; 
     } 
    }); 
+0

Ihre Aussage ist nicht korrekt. Sowohl "mymodule.init();" als auch "mymodule.init.call (mymodule);" sind gleich, und wenn Sie 'mymodule.init()' ausführen, bezieht sich 'this' innerhalb von' init' auf das Objekt, von dem zurückgegeben wird das Modul, aber nicht zu "Fenster". –

+0

'this' kann sich nur auf Objekte beziehen, kann sich aber niemals auf einen Bereich beziehen. Sie müssen also entweder die Namen ändern, so dass sie nicht miteinander in Konflikt stehen, oder Sie müssen Ihre Daten in dem Objekt speichern, das Sie von der Initialisierung zurückgeben. Verwenden Sie entweder 'this. $ El = $ el' und entfernen Sie' var $ el; 'oder benennen Sie entweder' var $ el' oder den Parameter '$ el' um. –

Antwort

1

Sie haben dafür Sorge zu tragen $el die Aufgabe definiert, die init Methode trägt:

define(function() { 
    function init($el) { 
    this.$el = $el; 
    } 
    return { 
    $el: undefined, 
    init: init 
    }; 
}); 
+0

Ich habe die Frage mit einem vollständigeren Beispiel bearbeitet, stimmte zu, dass es ursprünglich nicht so klar war. Ich bevorzuge auch "this.foo", um klar zu machen, dass es sich auf "foo" in der Klasse/Modul bezieht, und "foo" bezieht sich auf eine lokale Funktionsvariable "foo". – Mark

+0

Ihre Änderung macht keinen Unterschied in Bezug auf den Inhalt des Problems, aber ich habe meine Antwort bearbeitet. – Louis

+0

Der Edit bedeutet, dass innerhalb der 'init'-Funktion' $ el' jetzt auf die Funktionsbereichsvariable verweist. Die Frage ist: innerhalb von 'init', wie man auf die Modulbereichsvariable '$ el' zugreift. Vielleicht ist das in Javascript nicht so einfach, es ist ein ziemlich normales Muster in anderen Sprachen. – Mark