国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
Duck punch
 結(jié)束語
Maison interface Web js tutoriel Parlez de la programmation AOP en Javascript

Parlez de la programmation AOP en Javascript

Feb 25, 2017 pm 01:39 PM


Duck punch

Ne parlons pas d'abord de la programmation AOP, commen?ons par la programmation Parlez de la programmation AOP en Javascript punch.

Si vous recherchez Parlez de la programmation AOP en Javascript punch sur Wikipédia, l'entrée que vous devriez trouver est Monkey Patch. Selon l'explication, le mot singe patch vient de guerrilla patch, ce qui signifie changer tranquillement le code pendant le fonctionnement. Le mot guerrilla a la même prononciation que gorille, et ce dernier signifie similaire à singe (le premier signifie ? gorille ?), et a finalement évolué vers For Monkey Patch.

Si vous n'avez pas entendu parler du punch au canard, vous avez peut-être entendu parler du typage au canard. Pour donner un exemple populaire, comment identifier un canard?:

Quand je vois un oiseau qui marche comme un canard et nage comme un canard et cancane comme un canard, j'appelle cet oiseau un canard.

Oui, si je trouve un animal qui cancane comme un canard et qui nage comme un canard, alors ce serait un canard !

Parlez de la programmation AOP en Javascript

Ce test peut para?tre un peu naturel et absurde, mais il est très pratique. Et il peut être utilisé pour résoudre un type de problème en programmation - pour Javascript ou des langages dynamiques similaires, comment implémenter ? interface ? ou ? classe de base ? ? Nous n'avons pas du tout besoin de nous soucier de leur passé. Nous nous soucions seulement de savoir si le type ou les paramètres de la méthode sont ce dont nous avons besoin lorsque nous les utilisons?:

var quack = someObject.quack;

if (typeof quack == "function" && quck.length == arguLength)
{
    // This thing can quack
}

Je vais trop loin. en fait, ce que je veux exprimer, c'est le canard. Punch a en fait évolué à partir du typage du canard?:

s'il marche comme un canard et parle comme un canard, c'est un canard, non?? en vous donnant le bruit que vous voulez, vous n'avez qu'à frapper ce canard jusqu'à ce qu'il renvoie ce que vous attendez... Au fait, cela me rappelle une blague très vivante?:

Dans. Afin de tester la force de la police aux états-Unis, à Hong Kong et en Chine continentale, les Nations Unies ont placé trois lapins dans trois forêts. Quel policier local trouvera le lapin en premier ? Tache?: trouver le lapin. (Le milieu est omis...) Finalement, il n'y avait que quatre policiers d'un certain pays. Ils jouèrent au mahjong pendant une journée, chacun d'eux prit une matraque et entra dans la forêt. Au bout de cinq minutes, ils entendirent les cris. d'animaux venant de la forêt. Il est sorti en parlant et en riant en fumant une cigarette, et derrière lui se trouvait un ours avec le nez meurtri et le visage enflé et il a dit : ? Ne me frappe plus, je le suis. juste un lapin..."

Bien que le punch au canard Un peu violent, mais toujours une méthode efficace. Lorsqu'il s'agit d'implémentation de code, cela signifie rendre le code original compatible avec les fonctions dont nous avons besoin. Par exemple, cet exemple sur le blog de Paul Irish :

En même temps, le mode Parlez de la programmation AOP en Javascript punch peut être annulé, mais c'est juste comme ?a :

/**
    我們都知道jQuery的`$.css`方法可以通過使用顏色的名稱給元素進(jìn)行顏色賦值。
    但jQuery內(nèi)置的顏色并非是那么豐富,如果我們想添加我們自定義的顏色名稱應(yīng)該怎么辦?比如我們想添加`Burnt Sienna`這個顏色
*/

(function($){
    
    // 把原方法暫存起來:
    var _oldcss = $.fn.css;

    // 重寫原方法:
    $.fn.css = function(prop,value){

        // 把自定義的顏色寫進(jìn)分支判斷里,特殊情況特殊處理
        if (/^background-?color$/i.test(prop) && value.toLowerCase() === 'burnt sienna') {
           return _oldcss.call(this,prop,'#EA7E5D');

        // 一般情況一般處理,調(diào)用原方法
        } else {
           return _oldcss.apply(this,arguments);
        }
    };
})(jQuery);

// 使用方法:
jQuery(document.body).css('backgroundColor','burnt sienna')

Mais là Il y a un problème avec ceci : la méthode d'origine doit être modifiée. Cela viole le principe ? ouvert-fermé ?, qui doit être ouvert à l'expansion et fermé à la modification. Comment résoudre ce problème ? Utilisez la programmation AOP.

(function($){

    var _old = $.fn.method;

    $.fn.method = function(arg1,arg2){

        if ( ... condition ... ) {
           return  ....
        } else {           // do the default
           return _old.apply(this,arguments);
        }
    };
})(jQuery);
AOP

Prise en main

AOP signifie Programmation orientée aspect, qui est évidemment relative à la programmation orientée objet. Aspect peut être traduit par ? aspect ? ou ? c?té ?, donc AOP est une programmation orientée aspect.

Comment comprendre les aspects ?

Dans la programmation orientée objet, les classes que nous définissons sont généralement des modèles de domaine, et les méthodes dont elles disposent sont généralement liées à une logique métier pure. Par exemple?:

Mais la situation réelle est généralement plus compliquée. Par exemple, nous devons ajouter une détection d'autorisation au mode de paiement, ou envoyer des journaux pour des statistiques, ou même un code tolérant aux pannes. Le code deviendra donc comme ceci?:

Class Person
{
    private int money;
    public void pay(int price)
    {
         this.money = this.money - price;   
    }
}

Ce qui est encore plus effrayant, c'est qu'un code similaire doit être ajouté à d'autres méthodes. De cette fa?on, la maintenabilité et la lisibilité du code sont devenues un gros problème. Nous espérons collecter ces codes non commerciaux dispersés mais courants et les utiliser et les gérer de manière plus conviviale. Il s'agit d'une programmation d'aspect. La programmation d'aspect permet la réutilisation du code en évitant la modification du code distant. C'est comme couper différents objets horizontalement et se concentrer sur la transformation des méthodes internes. La programmation orientée objet accorde plus d'attention à la conception architecturale globale.

Class Person
{
    private int money
    public void pay(price)
    {
        try 
        {
            if (checkAuthorize() == true) {
                this.money = this.money - price;    
                sendLog();
            }
        }
        catch (Exception e)
        {

        }   
    }
}
Implémentation

Le Parlez de la programmation AOP en Javascript punch introduit dans la section précédente est similaire à la programmation d'aspect, qui assurent tous deux le fonctionnement de la méthode originale tout en la transformant. Mais comme mentionné à la fin, le modèle consistant à modifier directement la méthode originale va à l’encontre des principes des meilleures pratiques orientées objet.

Javascript peut utiliser le modèle décorateur (en ajoutant des responsabilités supplémentaires à l'objet d'origine mais en évitant de modifier l'objet d'origine) pour implémenter la programmation AOP. Notez que l'accent est mis ici sur la mise en ?uvre. Ce que je tiens en outre à souligner, c'est que la programmation des aspects n'est qu'une idée et que le modèle de décorateur n'est qu'un moyen de mettre en pratique cette idée. Par exemple, en Java, vous pouvez utiliser le modèle de proxy, etc. . La programmation Aspect a plus de place pour jouer en Java et est plus standard. Je voulais présenter le modèle d'implémentation de Java dans cet article, mais mon niveau Java est limité et je ne comprends pas très bien l'implémentation de Java. Seule l'implémentation Javascript est présentée ici.

  AOP中有一些概念需要介紹一下,雖然我們不一定要嚴(yán)格執(zhí)行

  • joint-point:原業(yè)務(wù)方法;

  • advice:攔截方式

  • point-cut:攔截方法

  關(guān)于這三個概念我們可以串起來可以這么理解:

  當(dāng)我們使用AOP改造一個原業(yè)務(wù)方法(joint-point)時,比如加入日志發(fā)送功能(point-cut),我們要考慮在什么情況下(advice)發(fā)送日志,是在業(yè)務(wù)方法觸發(fā)之前還是之后;還是在拋出異常的時候,還是由日志發(fā)送是否成功再決定是否執(zhí)行業(yè)務(wù)方法。

  比如gihub上的meld這個開源項(xiàng)目,就是一個很典型的AOP類庫,我們看看它的API:

// 假設(shè)我們有一個對象myObject, 并且該對象有一個doSomething方法:

var myObject = {
    doSomething: function(a, b) {
        return a + b;
    }
};

// 現(xiàn)在我們想拓展它,在執(zhí)行那個方法之后打印出剛剛執(zhí)行的結(jié)果:

var remover = meld.after(myObject, 'doSomething', function(result) {
    console.log('myObject.doSomething returned: ' + result);
});

// 試試執(zhí)行看:

myObject.doSomething(1, 2); // Logs: "myObject.doSomething returned: 3"

// 這個時候我們想移除剛剛的修改:

remover.remove();

  由此可以看出,AOP接口通常需要三個參數(shù),被修改的對象,被修改對象的方法(joint-point),以及觸發(fā)的時機(jī)(apce),還有觸發(fā)的動作(point-cut)。上面說了那么多的概念,現(xiàn)在可能要讓各位失望了,Javascript的實(shí)現(xiàn)原理其實(shí)非常簡單

function doAfter(target, method, afterFunc){
    var func = target[method];
    return function(){
        var res = func.apply(this, arguments);
        afterFunc.apply(this, arguments);
        return res;   
    };
}

  當(dāng)然,如果想看到更完備的解決方案和代碼可以參考上面所說的meld項(xiàng)目

 結(jié)束語

  這一篇一定讓你失望了,代碼簡單又寥寥無幾。本篇主要在于介紹有關(guān)Parlez de la programmation AOP en Javascript和AOP的這幾類思想,我想編程的樂趣不僅僅在于落實(shí)在編碼上,更在于整個架構(gòu)的設(shè)計。提高代碼的可維護(hù)性和可拓展性會比高深莫測的代碼更重要。

?以上就是聊Javascript中的AOP編程的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.miracleart.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel PHP
1502
276
WebSocket et JavaScript : technologies clés pour mettre en ?uvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en ?uvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

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

Comment mettre en ?uvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en ?uvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

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.

Comment utiliser JavaScript et WebSocket pour mettre en ?uvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en ?uvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

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

JavaScript et WebSocket?: créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket?: créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

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 simple?:?Comment obtenir le code d'état HTTP Tutoriel JavaScript simple?:?Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

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

Comment mettre en ?uvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en ?uvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

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.

Comment utiliser insertBefore en javascript Comment utiliser insertBefore en javascript Nov 24, 2023 am 11:56 AM

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é).

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

See all articles