Heim Web-Frontend js-Tutorial Austausch von Ideen zur Implementierung der Abhängigkeitsinjektion in JavaScript_Javascript-Kenntnissen

Austausch von Ideen zur Implementierung der Abhängigkeitsinjektion in JavaScript_Javascript-Kenntnissen

May 16, 2016 pm 04:19 PM
javascript 依赖注入

Heutzutage wird jedes Framework modularisiert, selbst Front-End-Javascript ist keine Ausnahme. Jedes Modul ist für bestimmte Funktionen verantwortlich und es bestehen gegenseitige Abhängigkeiten zwischen den Modulen. Es stellt sich also die Frage: Wie implementiert man die Abhängigkeitsinjektion in JavaScript? (Die Abhängigkeitsinjektion von JavaScript hat entsprechende Implementierungen in allen wichtigen Frameworks. Hier lernen wir nur die Implementierungsideen)

Die folgenden Anforderungen:

Angenommen, es gibt bereits einen definierten Servicemodul-Schlüsselwertsatz, func ist der neu hinzugefügte Service und die Parameterliste ist die Serviceabhängigkeit.

Code kopieren Der Code lautet wie folgt:

var services = { abc : 123, def : 456, ghi : 789 } // Angenommen, dass ein Service
definiert wurde Funktion Service(abc, ghi){
This.write = function(){
console.log(abc);
console.log(ghi);
}
}
Funktion Activitor(func){
var obj;
// Implementieren
Rückgabe obj;
}

Lösung:

Nehmen Sie durch einen Mechanismus (Reflexion?) die durch die Funktion definierte Parameterliste heraus und weisen Sie nacheinander Werte zu. Dann instanziieren Sie die Funktion durch einen Mechanismus (Aktivator?).

Lösung:

1. Rufen Sie die Parameterliste der Funktion ab:

Wie erhalte ich die Parameterliste? Das erste, was mir in den Sinn kommt, ist der Reflexionsmechanismus. Gibt es also eine Reflexion in Javascript? Derzeit weiß ich nur, wie man die Funktion eval(str) verwendet, aber es scheint, dass es keine relevante Implementierung zum Abrufen der Parameterliste gibt. Wenn Sie sich die Definition von func.arguments noch einmal ansehen, ist diese Eigenschaft nur gültig, wenn func aufgerufen und Parameter übergeben werden, und kann die Anforderungen nicht erfüllen.

Können wir die Parameterliste erhalten, indem wir den String nach func.toString() verarbeiten?

Legen Sie los und probieren Sie es aus:

Code kopieren Der Code lautet wie folgt:

Funktion getFuncParams(func) {
var matches = func.toString().match(/^functions*[^(]*(s*([^)]*))/m);
If (matches && matches.length > 1)
            return matches[1].replace(/s*/, '').split(','
Geben Sie [];
zurück };

Zu diesem Zeitpunkt wird das Funktionsparameterlistenarray erhalten.

2. Abhängigkeiten anhand der Parameterliste finden:

Nachdem die Parameterliste, also die Abhängigkeitsliste, abgerufen wurde, ist es sehr einfach, die Abhängigkeiten als Parameter zu übergeben.

Code kopieren Der Code lautet wie folgt:

var params = getFuncParams(func);
for (var i in params) {
params[i] = Dienste[params[i]];
}

3. Abhängigkeitsparameter übergeben und instanziieren:

Wir wissen, dass es in Javascript zwei Funktionen namens func.constructor gibt: call(thisArg,[arg[,arg,[arg,[…]]]]) und apply(thisArg,args…), die beide können Funktionsoperation instanziiert werden. Der erste Parameter der Aufruffunktion ist dieser Zeiger, der Rest ist die Parameterliste. Dies eignet sich zur Verwendung, wenn die Funktionsparameterliste bekannt ist, aber nicht meinen Anforderungen entspricht. Wenn Sie sich die zweite Apply-Funktion ansehen, ist der erste Parameter ebenfalls dieser Zeiger und der zweite Parameter das Parameter-Array. Wenn er aufgerufen wird, weist er der Parameterliste von func automatisch nacheinander Werte zu, die genau meinen Anforderungen entsprechen Bedürfnisse.

Der Code lautet ungefähr wie folgt:

Code kopieren Der Code lautet wie folgt:

function Activitor(func){
var obj = {};
func.apply(obj, params);
Rückgabe obj;
}

An diesem Punkt können wir eine Instanz der Funktion erstellen und die für die Funktion erforderlichen Parameter übergeben.

4. Drucken und testen:

Vollständiger Code:

Code kopieren Der Code lautet wie folgt:

var
// Gehe davon aus, dass ein Service
definiert wurde Dienste = { abc: 123, def: 456, ghi: 789 },

// Parameterliste von func (Abhängigkeitsliste) abrufen
GetFuncParams = Funktion (func) {
         var matches = func.toString().match(/^functions*[^(]*(s*([^)]*))/m);
If (matches && matches.length > 1)
                 return matches[1].replace(/s /, '').split(',');
         return [];
},

// Füllen Sie Parameter (Abhängigkeiten) basierend auf der Parameterliste (Abhängigkeitsliste) aus
setFuncParams = Funktion (params) {
for (var i in params) {
              params[i] = services[params[i]];
}
         Parameter zurückgeben;
};

// Aktivator
function Activitor(func) {
var obj = {};
func.apply(obj, setFuncParams(getFuncParams(func)));
Rückgabe obj;
}

//Neuen Dienst definieren
Funktion Service(abc, ghi) {
This.write = function () {
console.log(abc);
console.log(ghi);
}
}

// Dienst instanziieren und Methode aufrufen
var service = Activitor(Service);
service.write();


Die Konsole wird erfolgreich gedruckt!
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems Dec 17, 2023 am 08:41 AM

JavaScript ist eine in der Webentwicklung weit verbreitete Programmiersprache, während WebSocket ein Netzwerkprotokoll für die Echtzeitkommunikation ist. Durch die Kombination der leistungsstarken Funktionen beider können wir ein effizientes Echtzeit-Bildverarbeitungssystem erstellen. In diesem Artikel wird erläutert, wie dieses System mithilfe von JavaScript und WebSocket implementiert wird, und es werden spezifische Codebeispiele bereitgestellt. Zunächst müssen wir die Anforderungen und Ziele des Echtzeit-Bildverarbeitungssystems klären. Angenommen, wir haben ein Kameragerät, das Bilddaten in Echtzeit sammeln kann

Abhängigkeitsinjektionsmuster bei der Übergabe von Golang-Funktionsparametern Abhängigkeitsinjektionsmuster bei der Übergabe von Golang-Funktionsparametern Apr 14, 2024 am 10:15 AM

In Go wird der Abhängigkeitsinjektionsmodus (DI) durch die Übergabe von Funktionsparametern implementiert, einschließlich der Übergabe von Werten und Zeigern. Im DI-Muster werden Abhängigkeiten typischerweise als Zeiger übergeben, um die Entkopplung zu verbessern, Sperrenkonflikte zu reduzieren und die Testbarkeit zu unterstützen. Durch die Verwendung von Zeigern wird die Funktion von der konkreten Implementierung entkoppelt, da sie nur vom Schnittstellentyp abhängt. Durch die Zeigerübergabe wird auch der Overhead für die Übergabe großer Objekte reduziert, wodurch Sperrenkonflikte reduziert werden. Darüber hinaus erleichtert das DI-Muster das Schreiben von Komponententests für Funktionen mithilfe des DI-Musters, da Abhängigkeiten leicht simuliert werden können.

See all articles