


Javascript aop (programmation orientée aspect) autour des compétences d'analyse_javascript
Aop est également appelé programmation orientée aspect, dans laquelle la « notification » est l'implémentation spécifique des aspects, qui est divisée en avant (pré-notification), après (post-notification) et autour (notification surround des étudiants). ceux qui ont utilisé Spring doivent le connaître très bien, mais en js, AOP est un point technique sérieusement ignoré. Cependant, l'utilisation d'aop peut améliorer efficacement la logique du code js. Par exemple, dans les frameworks frontaux dojo et yui3, AOP est promu au rang de mécanisme interne d'événements personnalisés, visible partout dans le code source. Grâce à cette abstraction, les événements personnalisés de Dojo sont extrêmement puissants et flexibles. L'implémentation d'aop dans le dojo se fait dans le module dojo/aspect. Il existe trois méthodes principales : avant, après et autour. Cet article vous guidera étape par étape pour implémenter la méthode autour. Les articles suivants fourniront une analyse approfondie. du système structurel du module dojo/aspect.
Pour implémenter la notification surround dans js, le moyen le plus simple et le plus stimulant est d'utiliser le rappel
advice = function(originalFunc){ console.log("before function"); originalFunc(); console.log("after function"); } var obj = { foo: function(){ console.log('foo'); } } advice(obj.foo)
Résultat :
avant la fonction
foo
après la fonction
Haha, c'est trop simple. Peux-tu te rendormir ? . . .
Mais n’est-ce pas un peu trop dur ? . . . Le cadre promis. . . . Au moins le prochain appel à obj.foo devrait avoir ce résultat, au lieu d'un "foo" sec pour cela, nous devons apporter quelques modifications et utiliser des fermetures
;advice = function(originalFunc){ return function() { console.log("before function"); originalFunc(); console.log("after function"); } } var obj = { foo: function(){ console.log(this.name); }, name: "obj" } obj.foo = advice(obj.foo) obj.foo()
Sortie :
avant la fonction
après la fonction
Il semble que l'effet surround ait été atteint, mais où est passé le nom promis ? . . .
Dans la clôture renvoyée par les conseils, nous devons également régler les problèmes de portée
advice = function(originalFunc){ return function() { console.log("before function"); originalFunc(); console.log("after function"); } } var obj = { foo: function(){ console.log(this.name); }, name: "obj" } keepContext = function() { return obj['foo'].call(obj); } obj.foo = advice(keepContext);
Il semble que le problème de portée soit résolu en utilisant call. Lançons-le et voyons :
Bon sang, c'est la légendaire boucle sans fin ? . . .
Il semble que nous devions encore apporter quelques modifications et utiliser une variable intermédiaire pour éliminer la boucle infinie
advice = function(originalFunc){ return function() { console.log("before function"); originalFunc(); console.log("after function"); } } var obj = { foo: function(){ console.log(this.name); }, name: "obj" } var exist = obj.foo; keepContext = function() { return exist.call(obj); } obj.foo = advice(keepContext); obj.foo();
Sortie :
avant la fonction
obj
après la fonction
Haha, le monde est soudainement devenu un endroit magnifique. . . .
Mais ce tas de code semble-t-il trop bas ? Devrions-nous proposer des abstractions de haut niveau ? Eh bien, je le pense aussi
function around(obj, prop, advice){ var exist = obj[prop]; var advised = advice(function(){ return exist.call(obj, arguments); }); obj[prop] = advised; } advice = function(originalFunc){ return function() { console.log("before function"); originalFunc(); console.log("after function"); } } var obj = { foo: function(){ console.log(this.name); }, name: "obj" } around(obj, 'foo', advice); obj.foo();
La méthode autour dissocie le processus de traitement de l'objet spécifique ; tant que les conseils sont rédigés dans le format suivant, l'effet autour peut être obtenu
advice = function(originalFunc){ return function() { //before originalFunc(); //after } }
Haha, tu es si grand et cool en un instant, tellement cool. . . .
Ensuite, la question se pose : que dois-je faire si j'appelle accidentellement la méthode around une fois de plus ? . . . Front. . . . C'est une question. Devrions-nous laisser revenir un handle avec une méthode de suppression pour éliminer la liaison, tout comme les événements de liaison/suppression.
Ce que supprimer signifie, c'est que la prochaine fois que la fonction sera exécutée, elle n'exécutera plus la méthode around correspondante, mais exécutera uniquement la méthode originalFunc
function around(obj, prop, advice){ var exist = obj[prop]; var previous = function(){ return exist.call(obj, arguments); }; var advised = advice(previous); obj[prop] = advised; return { remove: function(){ obj[prop] = exist; advice = null; previous = null; exist = null; obj = null; } } } var count = 1; advice = function(originalFunc){ var current = count++; return function() { console.log("before function " + current); originalFunc(arguments); console.log("after function " + current); } } var obj = { foo: function(arg){ console.log(this.name + " and " + arg); }, name: "obj" } h1 = around(obj, 'foo', advice); h2 = around(obj, 'foo', advice); obj.foo(); h1.remove(); obj.foo(); h2.remove(); obj.foo();
Sortie :
before function 2 before function 1 obj and [object Arguments] after function 1 after function 2 obj and undefined before function 1
Ceci. . Non seulement cela s’avère un peu compliqué. . . A également signalé une erreur. . . . Oui, c'est supportable, mais mon oncle ne peut pas le supporter. Mon oncle ne peut pas le supporter, mais ma belle-sœur ne peut pas le supporter !
Ah, clôture. . . S'il vous plaît, donnez-moi de la force !
function around(obj, prop, advice){ var exist = obj[prop]; var previous = function(){ return exist.apply(obj, arguments); }; var advised = advice(previous); obj[prop] = function(){ //当调用remove后,advised为空 //利用闭包的作用域链中可以访问到advised跟previous变量,根据advised是否为空可以来决定调用谁 return advised ? advised.apply(obj, arguments) : previous.apply(obj, arguments); }; return { remove: function(){ //利用闭包的作用域链,在remove时将advised置空,这样执行过程中不会进入本次around //这几个不能删 //obj[prop] = exist; advised = null; advice = null; //previous = null; //exist = null; //obj = null; } } } var count = 1; advice = function(originalFunc){ var current = count++; return function() { console.log("before function " + current); originalFunc.apply(this, arguments); console.log("after function " + current); } } var obj = { foo: function(arg){ console.log(this.name + " and " + arg); }, name: "obj" } h1 = around(obj, 'foo', advice); h2 = around(obj, 'foo', advice); obj.foo('hello world'); h1.remove(); obj.foo('hello world'); h2.remove(); obj.foo('hello world');
Sortie :
before function 2 before function 1 obj and hello world after function 1 after function 2 before function 2 obj and hello world after function 2 obj and hello world
Après le combat, arrêtez-vous !
La première fois que je suis resté éveillé toute la nuit pour bloguer, j'étais aussi ivre. À deux heures, j'ai entendu me baiser à côté. À quatre heures, j'ai entendu le chant des corbeaux. Des oiseaux inconnus gazouillaient. A cinq heures, il y avait beaucoup de monde. Les oiseaux gazouillaient. . . .
Article de référence :
Utilisez AOP pour améliorer le code javascript
AOP (programmation orientée aspect) et POO (programmation orientée objet) de yui3

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

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

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.
