Насколько я понимаю, шаблон посетителя часто используется для добавления методов в некоторую иерархическую структуру.Но я все еще не понимаю: посмотрите пример, где я пытаюсь выделить левое поддерево:
Реализация дерева JavaScript:
function node(val) {
this.value = val;
this.left = this.right = null;
}
var tree = new node("A");
tree.left = new node("B1");
tree.right = new node("B2");
tree.left.left = new node("C1");
tree.left.right = new node("C2");
Я думаюЯ использую подсветку шаблона посетителя:
node.prototype.accept = function(visitorObj) {
visitorObj.visit(this);
}
function visitor() {
var that = this;
this.visit = function(tgt) {
tgt.value = "*"+tgt.value;
}
this.highlight = function(tgt) {
tgt.accept(that);
if(tgt.left) that.highlight(tgt.left);
if(tgt.right) that.highlight(tgt.right);
}
}
(new visitor()).highlight(tree.left);
Но зачем использовать методы accept-visit , когда это может быть более простым?
function visitor() {
var that = this;
this.highlight = function(tgt) {
tgt.value = "*"+tgt.value;
if(tgt.left) that.highlight(tgt.left);
if(tgt.right) that.highlight(tgt.right);
}
}
(new visitor()).highlight(tree.left);
Это похоже этот пример .Означает ли это, что если типы языков смешиваются (например, javascript), то нет никакой причины для пары «принять-посещение»?