如何制作动态功能?

时间:2017-10-22 06:57:13

标签: javascript jquery function loops dynamic-function

我有10个这样的功能:

function instagram_ajax(){
    return ajaxRequest('search/instagramid', 'instagramid').then(
        function(res) {
            var imgStatus = res[1].length > 0 ? "checked_successfully.png" : "checked_noRes.png";
            $('.option_name_instagramid + td').html("<img src='img/" + imgStatus + "' />")

            optionsRes['instagramid'] = res[1];

        }, function(err){
            $('.option_name_instagramid + td').html("<img src='img/warning.png' />")
        }
    );
}

function googleplus_ajax(){
    return ajaxRequest('search/googleplusid', 'googleplusid').then(
        function(res) {
            var imgStatus = res[1].length > 0 ? "checked_successfully.png" : "checked_noRes.png";
            $('.option_name_googleplusid + td').html("<img src='img/" + imgStatus + "' />")

            optionsRes['googleplusid'] = res[1];

        }, function(err){
            $('.option_name_googleplusid + td').html("<img src='img/warning.png' />")
        }
    );
}

.
.
.

如您所见,这些功能几乎相同,只是区别为单词instagramgoogleplus。我还有一个包含所有这些名字的数组:

var parts = ['instagram', 'googleplus', 'linkedin', 'facebook', ...];

现在我想知道,是否可以动态制作这些数组?我的意思是将一个基于变量的函数放入一个循环中并使用该数组来创建所有这些函数?这样的事情有可能吗?

1 个答案:

答案 0 :(得分:3)

制作一个包装函数

function ajax(str) {
  return function() {
    return ajaxRequest('search/'+str+'id', ''+str+'id').then(
        function(res) {
            var imgStatus = res[1].length > 0 ? "checked_successfully.png" : "checked_noRes.png";
            $('.option_name_'+str+'id + td').html("<img src='img/" + imgStatus + "' />")

            optionsRes[str+'id'] = res[1];

        }, function(err){
            $('.option_name_'+str+'id + td').html("<img src='img/warning.png' />")
        }
    );
  }
}

var instagram_ajax = ajax('instagram');
var googleplus_ajax = ajax('googleplus');

或您的案例

var parts = ['instagram', 'googleplus', 'linkedin', 'facebook'];

var funcs = {};
for (var i = 0; i < parts.length; i++)
  funcs[parts[i]] = ajax(parts[i]);

// now u do
funcs.instagram()