1. Обзор
Цепочка ответственности означает, что несколько объектов имеют возможность обработать запрос, что избегает отношения связи между отправителем и получателем запроса. Подключите объект в цепь и передайте запрос вдоль цепи, пока объект не обратится к нему.
Похоже, он такой же, как в связанном списке в структуре данных.
Но не испортите это, цепочка ответственности не равна связанному списку, потому что цепочку ответственности можно искать в любом узле, в то время как связанный список должен искать из начального узла.
Например, пузырьковые события в механизме событий DOM принадлежат цепочке обязанностей, в то время как захваченные события принадлежат связанному списку.
2. Используйте цепочку ответственности для моделирования пузырьков
Предположим, у нас есть три объекта: li, ul и div. Схема отношений трех заключается в следующем:
Например, когда мы запускаем объект LI, если LI не предотвращает пузырьки, он будет передан объекту UL. Когда он достигнет UL, если пузырьки не будут предотвращены, это будет передано объекту DIV (при условии, что DIV является корневым узлом). Точно так же UL и Div.
Видя это, совершенно ясно, что он подходит для написания таких потребностей с использованием модели цепочки ответственности.
Но как использовать JavaScript для реализации модели цепочки ответственности?
Следующим образом, мы можем построить основную архитектуру с помощью прототипов цепей:
Функция createMom (obj) {this.next = obj || нулевой;}; CreatemoM.prototype = {handle: function () {if (this.next) {this.next.handle (); }}};Всякий раз, когда мы используем конструктор CreativeOm для создания объекта, мы передаем связанный объект (ну, это очень связанный список).
Затем, когда мы запускаем объект и выполняем метод ручки, мы можем следовать этой цепочке и продолжать.
Тем не менее, следует отметить, что когда атрибут ручки объекта покрывает ручку в цепочке прототипа, как вы можете продолжать его передавать?
Просто используйте createmom.prototype.handle.call (this);
Итак, внедрение кодов LI, UL и DIV заключается в следующем:
var li = null, ul = null, div = null; div = new cenestionom (); div.handle = function (stopbubble) {console.log ('div'); if (stopbubble) {return; } else {createmoM.prototype.handle.call (this); }}; ul = new CreationOm (div); ul.handle = function (stopbubble) {console.log ('ul'); if (stopbubble) {return; } else {createmoM.prototype.handle.call (this); }}; li = new Creationom (ul); li.handle = function (stopbubble) {console.log ('li'); if (stopbubble) {return; } else {createmoM.prototype.handle.call (this); }};Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.