Comment comprendre les décorateurs es6
Dans es6, le modèle de décorateur est une théorie de conception qui étend dynamiquement les fonctions d'un objet sans changer la classe d'origine et en utilisant l'héritage ; l'essence du décorateur est une fonction ordinaire utilisée pour étendre les attributs de classe et la méthode des classes. Avantages de l'utilisation de décorateurs : 1. Le code devient plus lisible et le nom du décorateur est équivalent à un commentaire 2. Les fonctions d'origine peuvent être étendues sans modifier le code d'origine ;
L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.
Comment comprendre Decorator dans ES6 ?
Decorator, dont le nom nous rappelle facilement le modèle de décorateur
En termes simples, le modèle de décorateur est un moyen d'étendre dynamiquement un objet sans changer la classe d'origine et en utilisant la théorie de la conception fonctionnelle.
Il en va de même pour la fonction Décorateur dans ES6. Son essence n'est pas une structure haut de gamme, c'est juste une fonction ordinaire utilisée pour étendre les attributs de classe et les méthodes de classe
Un soldat est défini ici, et il n'a aucun équipement. à ce moment
class soldier{ }
Définir une fonction pour obtenir l'équipement AK, c'est-à-dire le décorateur
function strong(target){ target.AK = true }
Utiliser le décorateur pour améliorer le soldat
@strong class soldier{ }
Le soldat a maintenant une arme
soldier.AK // true
Bien que le code ci-dessus soit simple, vous pouvez voir clairement l'utilisation de Decorator (décoration) Deux avantages majeurs :
Le code devient plus lisible, et le nom du décorateur équivaut à un commentaire
Agrandir la fonction d'origine sans changer le code d'origine
Décoration L'utilisation de l'outil
Docorator Les objets modifiés sont les deux types suivants:
Décoration de classe
Décoration d'attribut de classe
Décoration de classe
Lors de la décoration de la classe elle-même, il peut accepter un paramètre, c'est-à-dire la classe elle-même
Décomposez le comportement du décorateur, et tout le monde peut avoir une compréhension plus profonde
@decorator class A {} // 等同于 class A {} A = decorator(A) || A;
Ce qui suit@testable
est un décorateur, et la cible est la classe entrante, qui est MyTestableClass, qui implémente l'ajout à la classe Attributs statiques
@testable class MyTestableClass { // ... } function testable(target) { target.isTestable = true; } MyTestableClass.isTestable // true
Si vous souhaitez transmettre des paramètres, vous pouvez encapsuler une couche de fonctions en dehors du décorateur
function testable(isTestable) { return function(target) { target.isTestable = isTestable; } } @testable(true) class MyTestableClass {} MyTestableClass.isTestable // true @testable(false) class MyClass {} MyClass.isTestable // false
Décoration des attributs de classe
Lors de la décoration des attributs de classe, vous pouvez accepter trois paramètres :
-
L'objet prototype de la classe
Le nom de l'attribut qui doit être décoré
L'objet de description du nom de l'attribut décoré
Définissez d'abord un décorateur en lecture seule
function readonly(target, name, descriptor){ descriptor.writable = false; // 将可写属性设为false return descriptor; }
Utilisez la lecture seule pour décorer la méthode du nom de la classe
class Person { @readonly name() { return `${this.first} ${this.last}` } }
C'est équivalent à L'appel suivant
readonly(Person.prototype, 'name', descriptor);
Si une méthode a plusieurs décorateurs, tout comme un oignon, elle entre d'abord de l'extérieur vers l'intérieur, puis s'exécute de l'intérieur vers l'extérieur
function dec(id){ console.log('evaluated', id); return (target, property, descriptor) =>console.log('executed', id); } class Example { @dec(1) @dec(2) method(){} } // evaluated 1 // evaluated 2 // executed 2 // executed 1
Le décorateur externe @dec(1) entre en premier, mais la couche interne Le décorateur @dec(2) est exécuté en premier
Remarque
Le décorateur ne peut pas être utilisé pour décorer des fonctions, car la fonction a des déclarations de variables
var counter = 0; var add = function () { counter++; }; @add function foo() { }
Dans la phase de compilation, cela devient ce qui suit
var counter; var add; @add function foo() { } counter = 0; add = function () { counter++; };
L'intention est de contrer après exécution Égal à 1, mais le résultat réel est que le compteur est égal à 0
Scénarios d'utilisation du décorateur
Basé sur le rôle puissant de Decorator, nous pouvons répondre aux besoins de divers scénarios. En voici quelques-uns simples :
Utilisez React - Lorsque vous utilisez Redux, si vous l'écrivez sous la forme suivante, c'est à la fois inesthétique et gênant
class MyReactComponent extends React.Component {} export default connect(mapStateToProps, mapDispatchToProps)(MyReactComponent);
Cela devient beaucoup plus simple grâce aux décorateurs
@connect(mapStateToProps, mapDispatchToProps) export default class MyReactComponent extends React.Component {}
Les mixins peuvent également être écrits en tant que décorateurs, ce qui rend leur utilisation plus concise
function mixins(...list) { return function (target) { Object.assign(target.prototype, ...list); }; } // 使用 const Foo = { foo() { console.log('foo') } }; @mixins(Foo) class MyClass {} let obj = new MyClass(); obj.foo() // "foo"
Parlons de plusieurs décorateurs courants dans core-decorators.js
@antobind
le décorateur autobind crée cet objet dans la méthode, lier l'objet d'origine
@readonly
le décorateur en lecture seule rend la propriété ou la méthode n'est pas accessible en écritureimport { autobind } from 'core-decorators'; class Person { @autobind getPerson() { return this; } } let person = new Person(); let getPerson = person.getPerson; getPerson() === person; // true
@deprecate
Le décorateur obsolète ou obsolète affiche un avertissement dans la console indiquant que la méthode sera obsolèteimport { readonly } from 'core-decorators'; class Meal { @readonly entree = 'steak'; } var dinner = new Meal(); dinner.entree = 'salmon'; // Cannot assign to read only property 'entree' of [object Object]
tutoriel vidéo javascript, front-end web]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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)

Dans ES6, vous pouvez utiliser la méthode reverse() de l'objet tableau pour inverser le tableau. Cette méthode est utilisée pour inverser l'ordre des éléments du tableau, en plaçant le dernier élément en premier et le premier élément en dernier. .inverse()". La méthode reverse() modifiera le tableau d'origine. Si vous ne souhaitez pas le modifier, vous devez l'utiliser avec l'opérateur d'expansion "...", et la syntaxe est "[...array].reverse(). ".

async est es7. async et wait sont de nouveaux ajouts à ES7 et sont des solutions pour les opérations asynchrones ; async/await peut être considéré comme un sucre syntaxique pour les modules co et les fonctions de générateur, résolvant le code asynchrone js avec une sémantique plus claire. Comme son nom l'indique, async signifie « asynchrone ». Async est utilisé pour déclarer qu'une fonction est asynchrone ; il existe une règle stricte entre async et wait. Les deux sont inséparables l'un de l'autre et wait ne peut être écrit que dans des fonctions asynchrones.

Pour la compatibilité du navigateur. En tant que nouvelle spécification pour JS, ES6 ajoute de nombreuses nouvelles syntaxes et API. Cependant, les navigateurs modernes ne prennent pas en charge les nouvelles fonctionnalités d'ES6, le code ES6 doit donc être converti en code ES5. Dans les outils de développement Web WeChat, babel est utilisé par défaut pour convertir le code de syntaxe ES6 du développeur en code ES5 bien pris en charge par les trois terminaux, aidant les développeurs à résoudre les problèmes de développement causés par différents environnements uniquement dans le projet. Il suffit de configurer et de vérifier le ; Option "ES6 à ES5".

Étapes : 1. Convertissez respectivement les deux tableaux en types d'ensemble, avec la syntaxe "newA=new Set(a); newB=new Set(b);" 2. Utilisez has() et filter() pour trouver l'ensemble de différences. , avec la syntaxe " new Set([...newA].filter(x =>!newB.has(x)))", les éléments de l'ensemble de différences seront inclus dans une collection d'ensembles et renvoyés 3. Utilisez Array. from pour convertir l'ensemble en tableau Tapez, syntaxe "Array.from(collection)".

Dans es5, vous pouvez utiliser l'instruction for et la fonction indexOf() pour réaliser la déduplication de tableau. La syntaxe "for(i=0;i<array length;i++){a=newArr.indexOf(arr[i]);if( a== -1){...}}". Dans es6, vous pouvez utiliser l'opérateur spread, Array.from() et Set pour supprimer la duplication ; vous devez d'abord convertir le tableau en un objet Set pour supprimer la duplication, puis utiliser l'opérateur spread ou la fonction Array.from(). pour reconvertir l'objet Set en un groupe Just.

Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ? En Python, les décorateurs et les gestionnaires de contexte sont deux concepts et fonctionnalités très utiles. Ils sont tous conçus pour simplifier le code, augmenter la lisibilité du code et faciliter la réutilisation du code. 1. Décorateur Un décorateur est une fonction spéciale en Python utilisée pour modifier le comportement d'une fonction. Cela nous permet d'envelopper ou d'étendre la fonction d'origine sans la modifier. Les décorateurs sont largement utilisés dans de nombreux frameworks et bibliothèques Python, tels que Flask, Dj

Ceci est notre troisième article pour vous apprendre étape par étape comment implémenter un timer Python. Les deux premiers articles : vous apprennent étape par étape comment implémenter un timer Python et utiliser des gestionnaires de contexte pour étendre les timers Python, rendant notre classe Timer pratique à utiliser, belle et pratique. Mais cela ne nous satisfait pas, il existe encore un cas d’usage qui peut encore le simplifier. Supposons que nous devions suivre le temps passé dans une fonction donnée dans notre base de code. Avec un gestionnaire de contexte, vous avez essentiellement deux options différentes : 1. Utiliser Timer chaque fois que vous appelez une fonction : with Timer("some_name") : do_something() Quand nous sommes dans

Dans es6, la zone morte temporaire est une erreur de syntaxe, qui fait référence aux commandes let et const qui font que le bloc forme une portée fermée. Dans un bloc de code, avant qu'une variable ne soit déclarée à l'aide de la commande let/const, la variable est indisponible et appartient à la « zone morte » de la variable avant que la variable ne soit déclarée ; c'est ce qu'on appelle syntaxiquement une « zone morte temporaire ». ES6 stipule que la promotion des variables ne se produit pas dans les zones mortes temporaires et dans les instructions let et const, principalement pour réduire les erreurs d'exécution et empêcher l'utilisation de la variable avant qu'elle ne soit déclarée, ce qui peut entraîner un comportement inattendu.
