


Partager des idées pour implémenter l'injection de dépendances dans les compétences JavaScript_javascript
De nos jours, chaque framework est modularisé, même le javascript front-end ne fait pas exception. Chaque module est responsable de certaines fonctions, et il existe des interdépendances entre les modules. La question se pose donc : Comment implémenter l'injection de dépendances en JavaScript ? (L'injection de dépendances de JavaScript a des implémentations correspondantes dans tous les principaux frameworks. Ici, nous apprenons uniquement les idées d'implémentation)
Les exigences suivantes :
Supposons qu'il existe déjà un ensemble de valeurs-clés de module de service défini, func est le nouveau service ajouté et la liste de paramètres est la dépendance du service.
var services = { abc : 123, def : 456, ghi : 789 }; // Supposons qu'un service
ait été défini fonction Service(abc, ghi){
This.write = function(){
console.log(abc);
console.log(ghi);
>
>
fonction Activateur(func){
var obj;
// Implémenter
Retourner l'objet ;
>
Solution :
Par un mécanisme (réflexion ?), retirez la liste de paramètres définie par la fonction et attribuez les valeurs une par une. Ensuite, instanciez la fonction via un mécanisme (Activitor ?).
Solution :
1. Obtenez la liste des paramètres de la fonction :
Comment obtenir la liste des paramètres ? La première chose qui me vient à l’esprit est le mécanisme de réflexion. Alors, y a-t-il une réflexion en javascript ? Il devrait y en avoir. Actuellement, je sais seulement comment utiliser la fonction eval(str), mais il semble qu'il n'y ait pas d'implémentation pertinente pour obtenir la liste des paramètres. En regardant à nouveau la définition de func.arguments, cette propriété n'est valide que lorsque func est appelée et que les paramètres sont transmis, et elle ne peut pas répondre aux exigences.
Pouvons-nous obtenir la liste des paramètres en traitant la chaîne après func.toString() ?
Commencez et essayez :
fonction getFuncParams(func) {
var matches = func.toString().match(/^functions*[^(]*(s*([^)]*))/m);
Si (correspond à && matches.length > 1)
renvoie les correspondances[1].replace(/s*/, '').split(','
); Retourner [];
};
À ce stade, le tableau de liste de paramètres func est obtenu.
2. Rechercher les dépendances en fonction de la liste des paramètres :
Après avoir obtenu la liste des paramètres, c'est-à-dire la liste des dépendances, il est très simple de transmettre les dépendances en tant que paramètres.
var params = getFuncParams(func);
pour (var i dans les paramètres) {
params[i] = services[params[i]];
>
3. Passer les paramètres de dépendance et instancier :
Nous savons qu'il existe deux fonctions appelées func.constructor en javascript : call(thisArg,[arg[,arg,[arg,[…]]]]) et apply(thisArg,args…), qui peuvent toutes deux être instancié opération func. Le premier paramètre de la fonction d'appel est ce pointeur, et le reste est la liste des paramètres. Cela peut être utilisé lorsque la liste des paramètres func est connue, mais ne répond pas à mes besoins. En regardant la deuxième fonction d'application, le premier paramètre est également ce pointeur, et le deuxième paramètre est le tableau de paramètres. Lorsqu'il est appelé, il attribuera automatiquement des valeurs à la liste de paramètres de func une par une, ce qui correspond juste à mon. besoins.
Le code est à peu près le suivant :
fonction Activateur(func){
var obj = {};
func.apply(obj, params);
Retourner l'objet ;
>
À ce stade, nous pouvons créer une instance de la fonction et transmettre les paramètres requis par la fonction.
4. Imprimer et tester :
Code complet :
var
// Supposons qu'un service
ait été défini Services = { abc : 123, déf : 456, ghi : 789 },
// Récupère la liste des paramètres de func (liste de dépendances)
GetFuncParams = fonction (func) {
var matches = func.toString().match(/^functions*[^(]*(s*([^)]*))/m);
Si (correspond à && matches.length > 1)
renvoie les correspondances[1].replace(/s /, '').split(',');
retourner [];
},
// Remplir les paramètres (dépendances) en fonction de la liste de paramètres (liste de dépendances)
setFuncParams = fonction (params) {
pour (var i dans les paramètres) {
params[i] = services[params[i]];
>
renvoie les paramètres ;
};
// Activateur
fonction Activateur(func) {
var obj = {};
func.apply(obj, setFuncParams(getFuncParams(func)));
Retourner l'objet ;
>
//Définir un nouveau service
fonction Service(abc, ghi) {
This.write = function () {
console.log(abc);
console.log(ghi);
>
>
// Instancier le service et la méthode d'appel
var service = Activitor(Service);
service.write();
La console s'imprime avec succès !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

JavaScript est un langage de programmation largement utilisé dans le développement Web, tandis que WebSocket est un protocole réseau utilisé pour la communication en temps réel. En combinant les puissantes fonctions des deux, nous pouvons créer un système efficace de traitement d’images en temps réel. Cet article présentera comment implémenter ce système à l'aide de JavaScript et WebSocket, et fournira des exemples de code spécifiques. Tout d’abord, nous devons clarifier les exigences et les objectifs du système de traitement d’images en temps réel. Supposons que nous disposions d'un appareil photo capable de collecter des données d'image en temps réel.

Dans Go, le mode d'injection de dépendances (DI) est implémenté via le passage de paramètres de fonction, y compris le passage de valeurs et le passage de pointeurs. Dans le modèle DI, les dépendances sont généralement transmises sous forme de pointeurs pour améliorer le découplage, réduire les conflits de verrouillage et prendre en charge la testabilité. En utilisant des pointeurs, la fonction est découplée de l'implémentation concrète car elle ne dépend que du type d'interface. Le passage du pointeur réduit également la surcharge liée au passage d'objets volumineux, réduisant ainsi les conflits de verrouillage. De plus, le modèle DI facilite l'écriture de tests unitaires pour les fonctions utilisant le modèle DI, car les dépendances peuvent être facilement simulées.
