簡體   English   中英

當其名稱作為字符串傳遞給函數時,如何執行JavaScript函數?

[英]How to execute a JavaScript function when its name is passed as a string in function?

如何使用作為參數傳遞的函數名稱。

例:

showError('container', 'id', '- message', 'show');
showError('container', 'id', '', 'hide');


function showError(container, id, msg, action)
{    
    if(action == 'show') {  
        $('#' + container).show();       
        $('#' + id).html(msg).show();
    }
    else {  
        $('#' + container).hide();       
        $('#' + id).html(msg).hide();
    }

}

obj.foo()實際上是兩步操作。 obj.foo返回一個函數對象,然后()執行它。 obj['foo']返回相同的函數對象,因此添加()以執行它。

由於obj['foo']obj.foo相同。 即使該屬性上的值是一個函數。 因此,您始終可以使用[]訪問器,並使用字符串作為鍵名來訪問任何屬性。

$('#' + container)[action]();

使用括號表示法通過字符串訪問相應的方法:

function showError(container, id, msg, action) {    
    $('#' + container)[action]();       
    $('#' + id).html(msg)[action]();
}

但是,您的方法看起來很奇怪。 我建議將操作限制為兩個值,然后自動執行操作:

function showError(container, id, msg) {
    var action = msg=='' ? 'hide' : 'show';
    $('#' + container)[action]();       
    $('#' + id).text(msg)[action]();
}

一般情況下,括號表示法是好的。 在您的情況下,請使用toggle

function showError(container, id, msg, action)
{    
        $('#' + container).toggle(action === 'show');       
        $('#' + id).html(msg).toggle(action === 'show');
}

甚至(如Bergi建議的那樣):

function showError(container, id, msg)
{    
        $('#' + container).toggle(!!msg);       
        $('#' + id).html(msg);
}

(它使用了我自己的發明,double-bang !! ,它將真值或偽值轉換為布爾值。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM