如何缩短此代码

时间:2011-05-18 11:52:45

标签: javascript jquery

我有以下插件:

(function($) {
    $.fn.myPlugin = function(options) {
    var opt = $.extend({}, $.fn.myPlugin.defaults, options);

        if (!opt.a) {
            console.log('a is required!');
            return false;
        }
        if (!opt.b) {
            console.log('b is required!');
            return false;
        }
        if (!opt.c) {
            console.log('c is required!');
            return false;
        }
        //Rest of the logic
    }
    $.fn.myPlugin.defaults = {
    };
});

现在这个插件将从外部调用:

$('div.x').myPlugin({
    a:'aa',
    b:'bb',
    c:'cc'
});

从插件中可以看出,我需要来自外部的a,b和c选项,即它们是强制性的。但是可以有10-15个强制选项和这个代码

        if (!opt.a) {
            console.log('a is required!');
            return false;
        }
        if (!opt.b) {
            console.log('b is required!');
            return false;
        }
        if (!opt.c) {
            console.log('c is required!');
            return false;
        }

会变得冗长而繁琐。是否有更短或更聪明的方式来写这个?我在想一些常见的代码。

2 个答案:

答案 0 :(得分:5)

如果有那么多,你可以把它们放在一个数组中并检查一下:

var required = ['a', 'b', 'c'];
var index, optname;
for (index = 0; index < required.length; ++index) {
    optname = required[index];
    if (!(optname in opt)) {
        console.log(optname + " is required");
        return false;
    }
}

请注意,我已经在那里进行if (!(optname in opt))检查(而不是原来的if (!opt[optname])),以允许必须指定的选项,但0,{ {1}},false或其他假名值有效。 undefined检查看看该选项是否存在,而不必担心它的价值是真的。


稍微偏离主题:您可能会选择等到失败,直到您检查了所有属性,正如@Marcus在评论中指出的那样。此外,您可能会考虑抛出异常而不是返回false,因为未能正确指定选项的人应该是一个例外情况......但这些都是次要的。

答案 1 :(得分:0)

$.each(['a','b','c'], function(key, val) {
    if (!opt[val] !== void 0) console.log(val + " is require");
});

$.each更短/更整洁。

这与@ T.J.Crowder的回答是一样的。

P.S。 void 0 === undefined