如何解决如果选择值为空,我可以神奇地使选择器不起作用吗?
背景: 我有一个这样的函数:
hide_modules('string1','string2');
该功能类似于:
function hide_modules(param1,param2) {
MM.getModules()
.withClass(param1)
.exceptWithClass(param2)
.enumerate(function(module) {
module.hide(
// some other code
);
});
}
大多数时候,我使用上面显示的值来调用函数。 有时我不希望'string1'具有值,并且我希望我的函数不使用该第一个选择器,实际上是这样的:
MM.getModules()
// .withClass(param1)
.exceptWithClass(param2)
.enumerate(function(module) {
module.hide(
// some other code
);
});
我尝试用一个空字符串,0,false作为param1来调用它,但是最终结果类的选择不是我想要的。 有时我也用param2为空并且不希望使用与param2相关的选择器来称呼它。
所以问题是: 无需编写大的if-then-else语句,当未指定param1和/或param2值时,是否可以通过某种花哨的方法使这些选择器不起作用(相当于像上面那样注释掉它)?
在我无法更改的第3方库中为我提供了函数调用的支持代码。我在这里包括一些相关的部分,因为它可能有助于答案:
var withClass = function (className) {
return modulesByClass(className,true);
};
var modulesByClass = function (className,include) {
var searchClasses = className;
if (typeof className === "string") {
searchClasses = className.split(" ");
}
var newModules = modules.filter(function (module) {
var classes = module.data.classes.toLowerCase().split(" ");
for (var c in searchClasses) {
var searchClass = searchClasses[c];
if (classes.indexOf(searchClass.toLowerCase()) !== -1) {
return include;
}
}
return !include;
});
解决方法
由于js不支持函数重载,因此唯一的方法是在方法内部验证参数。检查truthy
,三元运算符将解决问题
var modules = MM.getModules();
modules = param1 ? modules.withClass(param1) : modules;
modules = param2 ? modules.exceptWithClass(param2) : modules;
modules.enumerate(function(module) {
module.hide(
// some other code
);
});
跳过第一个参数
hide_modules(null,'string2');
跳过第二个参数
hide_modules('string1');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。