currenlty ich die folgende Grund haben IIFE
in JavaScript
:Wie übergebe ich Service zu einem IIFE?
var myService = new Service(); //code omitted but its a service class that gets data
var myTest = Test(myService);
Die oben nicht funktioniert:
var Test = (function(service){
var me = this;
me.service = service;
var my = {};
my.getData1 = function(){
return me.service.GetData1();
}
my.getData2 = function(){
return me.service.GetData2();
}
return my;
}());
Was würde ich in der Lage sein möchte Folgendes zu tun ist. Die Linie var myTest = Test(myService);
wirft einen Fehler:
Test is not a function
Ich weiß auch, dass in einem IIFE
, ein in Werten übergeben muss, weil es ist sofort aufgerufen, so dass die letzte Zeile sollte wie etwas sein:
}(service));
I kann diesen Code arbeiten lassen wenn ich nur entfernen Test
wird die globale Variable halten die IIFE
und stattdessen machen es eine globale Funktion mit dem fol Muhen Unterschrift:
function Test(service) {}
Aber ich bin mit einem IIFE
zu versuchen und zu verhindern, dass die globale Reichweite zu verschmutzen. Ist es möglich, dass ich es immer noch verwenden kann, wie ich es entworfen habe, und eine Instanz meiner Service
später an Test
weiterleiten? Oder kann es nur eine IIFE
sein, wenn alle seine Eingänge aufgelöst werden, wenn es aufgerufen wird und daher Werte nicht übergeben werden können (oder muss ich service
einen Parameter für jede Methode in der IIFE
, die es erfordert) machen?
Ich versuchte zu verhindern, dass der Dienst für jede Methode übergeben werden musste. Wenn es möglich ist, möchte ich die Dienstinstanz weiterreichen, aber vielleicht ist mein Verständnis nicht korrekt. Bitte korrigieren Sie mich, wenn es so ist.
Warum der IIFE und nicht nur ein normaler Konstruktor, der den Dienst übernimmt? "Ich benutze ein IIFE, um zu versuchen, den globalen Geltungsbereich zu verschmutzen." Es gibt keinen Unterschied ... "Test" wird weiterhin global sein. – plalx
@plalx - Ich bin tatsächlich an Ihrem Vorschlag interessiert. Das Problem, auf das ich gestoßen bin, ist, wenn ich 'function Test (service) {this.myService = service'} als Konstruktor habe und später versuche, es zu benutzen, wie' var result = this.carservice.GetData1(); ' Innerhalb einer Methode wie 'my.getData1', bekomme ich eine' Kann Eigenschaft 'GetData1' von 'undefined' nicht lesen.Ich denke, das liegt daran, dass "das" an das erstellte Objekt gebunden ist und nicht so funktioniert, wie ich es hatte. Ich habe eine Problemumgehung, wo ich 'this' zu einer anderen Variablen wie 'var me = this 'zuweisen. Was denken Sie? – atconway
@plalx - macht nichts, wahrscheinlich überlegte es. Einfach den Service übergeben und direkt in den Anrufen verwenden. Keine Notwendigkeit, um zu übertragen, wie unten erwähnt. Die Verwendung direkt in den Methoden nach dem Übergeben in den Konstruktor funktioniert. – atconway