1. Présentation
Le modèle de la chaîne de responsabilité signifie que plusieurs objets ont la possibilité de traiter la demande, évitant ainsi la relation de couplage entre l'expéditeur et le récepteur de la demande. Connectez l'objet dans une chaîne et passez la demande le long de la chaîne jusqu'à ce qu'un objet le gère.
Cela semble être le même que la liste liée dans la structure de données.
Mais ne gâchez pas, la chaîne de responsabilité n'est pas égale à une liste liée, car la chaîne de responsabilité peut être recherchée à n'importe quel nœud, tandis que la liste liée doit être recherchée à partir du nœud débutant.
Par exemple, les événements bouillonnants du mécanisme des événements DOM appartiennent à la chaîne de responsabilités, tandis que les événements capturés appartiennent à la liste liée.
2. Utilisez la chaîne de responsabilité pour simuler des bulles
Supposons que nous ayons trois objets: li, ul et div. Le diagramme relationnel des trois est le suivant:
Par exemple, lorsque nous déclenchez l'objet Li, si Li n'empêche pas les bulles, elle sera transmise à l'objet UL. Lorsqu'il atteint UL, si les bulles ne sont pas empêchées, elle sera transmise à l'objet div (en supposant que le div est le nœud racine). De même, UL et Div.
En voyant cela, il est très clair qu'il convient à l'écriture de tels besoins en utilisant le modèle de chaîne de responsabilité.
Mais comment utiliser JavaScript pour implémenter le modèle de chaîne de responsabilité?
Comme suit, nous pouvons construire l'architecture de base à travers des chaînes prototypes:
fonction créationom (obj) {this.next = obj || nul;}; Createdom.prototype = {handle: function () {if (this.next) {this.next.handle (); }}};Chaque fois que nous utilisons le constructeur créé pour créer un objet, nous passons l'objet associé (eh bien, c'est une liste très liée).
Ensuite, lorsque nous déclenchez un objet et exécutons la méthode de poignée, nous pouvons suivre cette chaîne et continuer.
Cependant, il convient de noter que lorsque l'attribut de poignée d'un objet couvre la poignée dans la chaîne prototype, comment pouvez-vous continuer à le transmettre?
Utilisez simplement créeyom.prototype.handle.call (this);
Ainsi, la mise en œuvre des codes Li, UL et Div est la suivante:
var li = null, ul = null, div = null; div = new Createdom (); div.handle = function (stopbubble) {console.log ('div'); if (stopbubble) {return; } else {créeyom.prototype.handle.call (this); }}; ul = new Createdom (div); ul.handle = fonction (stopbubble) {console.log ('ul'); if (stopbubble) {return; } else {créeyom.prototype.handle.call (this); }}; li = new Createdom (ul); li.handle = function (stopbubble) {console.log ('li'); if (stopbubble) {return; } else {créeyom.prototype.handle.call (this); }};Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.