我有以下插件:
(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;
}
会变得冗长而繁琐。是否有更短或更聪明的方式来写这个?我在想一些常见的代码。
答案 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