2011-02-09 2 views
0

У меня есть пользовательский объект, который содержит массив (называемый «дети»), где будут храниться объекты того же типа, в результате создается дерево.
Скажем, это выглядит так:Расширение объекта методом древовидного перемещения в javascript

function CustomObject(){ 
    if (this instanceof Topic) { 
    this.text = "Test"; 
    this.children = []; 
    } else 
     return new CustomObject(); } 

Теперь я хотел бы добавить метод «ForAll» к этому объекту, который будет выполнять другую функцию, представленную в качестве аргумента, на все элементы этого дерева в глубине Первая мода. Каков наилучший способ сделать это?

ответ

1

Что-то вроде этого?

CustomObject.prototype.forAll = function(func) { 
    // process this object first 
    func(this); 

    // then process children 
    for (var i = 0; i < this.children.length; i++) 
    this.children[i].forAll(func); 
} 
+0

К сожалению, это не работает. Кажется, что это только выполняется на первом элементе, а затем выходит с ошибкой. Его можно попробовать здесь: http://dl.dropbox.com/u/118505/psychojs/p.html –

+0

@Piotr: Ваша ошибка, кажется, здесь: 'map.centralTopic.forAll (get_text())' - 'get_text()' вызовет функцию немедленно, но вы должны передать объект функции 'forAll', поэтому вы должны сделать' map.centralTopic.forAll (get_text) ' – casablanca

+0

Да! Теперь я понимаю! Благодарю. –

Смежные вопросы