2014-10-10 2 views
0

вот пример.Javascript, могу ли я перейти к другим функциям ребенка

function parentOne(){ 
     //do something 

     function ChildOne(){ 
     // do something 
     }; 
    }; 

    function parentTwo(){ 
     //how can I input data into ChildOne() from here? 
    }; 

Я пытаюсь исправить ошибку. ParentTwo будет работать только после того, как был удален один ребенок. То потому что когда childOne попадает в мой код, он начинает API направления. После этого я могу использовать parentTwo для изменения значения или из значения в моей форме, и оно будет отправлено. Его рода трудно объяснить, но мне нужно parentTwo для init childOne, если пользователь не сделал это через функцию parentOne.

Я знаю javascript, но я никогда не пробовал это раньше и, если кажется, что-то подозрительное для меня.

+0

Ум, текущий способ написано, это невозможно. – epascarello

+0

'parentOne' должен вызываться до того, как' parentTwo' сможет получить доступ к 'ChildOne'. –

+0

parentOne вызывается при событии onload. Как я мог это сделать, чтобы это было возможно? Это приложение похоже на готовность. Я просто столкнулся с этой ошибкой и ее прекращением развертывания. – Christian4423

ответ

1

Вы можете назвать ParentOne фабрикой, которая создает функцию (ChildOne). Но вам нужно немного переписать его.

function parentOne(){ 
    //do something 

    return function ChildOne(){ 
    // do something 
    return 'x'; 
    }; 
}; 

function parentTwo(){ 
    //how can I input data into ChildOne() from here? 
    var a = parentOne(); 

    //You can call a() now. It runs the returned function which is ChildOne 
    var b = a(); 

    //b is now the result of ChildOne, which is 'x' 
}; 
+0

Отличное решение! Это закончилось тем, что мне нужно, спасибо, Кристиан! – Christian4423

0

Очевидным решением является возвращение ChildOne из parentOne. Преимущество этого заключается в том, что ваш существующий код, который использует parentOne и childOne, не нуждается в изменении.

Если вам нужно условие, вы можете сохранить переменную, чтобы сказать, был ли уже вызван ChildOne.

var childOneCalled = false; 

function parentOne(){ 
    //do something 

    function ChildOne(){ 
    // do something 
    childOneCalled = true; 
    }; 

    return ChildOne(); 
}; 

function parentTwo(){ 
    if(!childOneCalled){ 
     parentOne()(); // call ChildOne 
    } 
}; 
+0

Я использовал ваше решение, и это сработало и для меня! Я бы проголосовал за это, если бы у меня было достаточно репутации. Спасибо также! – Christian4423

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