2014-01-28 4 views
0

У меня есть класс UserInterface с общедоступным методом, который должен иметь возможность делегировать свою работу частной функции на основе параметра. Название частной обертки должно быть вызвано динамически:Как вызвать переменную частную функцию?

function UserInterface() { 
    // ... 

    this.getViewHtml = function(view) { 
    // Given this snippet, view would be passed in as 
    // either "First" or "Second". 

    // Wrong syntax, I know, but illustrative of what 
    // I'm trying to do, I think 
    return 'get' + view + 'ViewHtml'(); 
    }; 

    function getFirstViewHtml() { 
    return someHtml; 
    }; 

    function getSecondViewHtml() { 
    return someHtml; 
    }; 


    // ... 
} 

Как и следовало ожидать, если я не имею требование переменного, я могу назвать частную функцию просто отлично.

Как я могу получить свою публичную функцию для доступа к соответствующему частному методу с использованием имени функции на основе переменных? Это вне любого объекта window, поэтому window['get' + view + 'ViewHtml'] не работает.

Любое понимание будет оценено по достоинству.

ответ

0

Вы должны определить свои личные функции, методы частного объекта:

function UserInterface() {  
    this.getViewHtml = function(view) { 
    return methods['get' + view + 'ViewHtml'](); 
    }; 

    var methods = { 
    getFirstViewHtml : function() { return someHtml; }, 
    getSecondViewHtml : function() { return someHtml; }, 
    } 
} 

В качестве альтернативы можно использовать переключатель:

this.getViewHtml = function(view) { 
    switch(view) { 
    case 'first': return getFirstViewHtml(); 
    case 'second': return getSecondViewHtml(); 
    default : throw new Error('Something is terribly wrong'); 
    } 
}; 
+0

Да, я надеялся избежать переключателя/при заходе на посадку , Я никогда не видел подход к частным объектам, но попробую. Кажется, это хакки на первый взгляд, но, возможно, это только потому, что это ново для меня. :-) Благодаря. –

+1

Это примерно так же взломано, как подход к окну ['get' + stuff]. Я не вижу никаких проблем с ним, как правило, связанных с хаками, поэтому вы, вероятно, хороши. – Tibos

+0

Да, хороший момент. –

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