我正在尝试制作我的对象列表中允许的预设选项列表。这是代码
var a = function(cmd, options){
var objList = [options.search ,options.demand];
if(!(options in objList)){
console.warn('Not an Allowed * in the options Property');
}
};
或者我应该
var a = function(cmd, options){
var objList = [search , demand];
if(!(options in objList)){
console.warn('Not an Allowed option in the options Property');
}
};
基本上我想要做的是设置选项属性中search
和demand
是允许的选项,所以晚于可以做到
a('cmd',{
search:'',
demand:function() {
alert('Hello');
},
//warn that the next option is not allowed
quote: function() {
alert('quote of user');
}
});
如果您无法理解我的要求,请询问,我会尽力解释一下。
也许这样写会更好?
var a = function(cmd, options){
options = {
theme: function(color) {
$('body').css('backgroundColor',color);
},
color:''
};
};
a('cmd',{
theme:'#000'//though this is not working?
});
答案 0 :(得分:2)
您可以针对一系列允许的选项检查options
中的每个媒体资源,如下所示:
var a = function(cmd, options){
var allowedOptions = ["search", "demand"];
var hasDisallowedOptions = false;
for (option in options) {
if(allowedOptions.indexOf(option) === -1 ) {
hasDisallowedOptions = true;
break;
}
}
// if hasDisallowedOptions is true, then there is a disallowed option
};
答案 1 :(得分:1)
在对象中传递参数的一个想法是,它允许您选择要在函数中使用的参数,您可以简单地忽略options
对象中的额外属性。因此,您不需要“过滤”参数的属性。
让我们假设你有这样一个函数:
var a = function (cmd, options) {
var theme = {
backgroundColor: options.bgColor,
color: options.color
}
// Do something with theme
// Notice also, that there was no use for options.extra in this function
}
然后你这样调用a
:
a('cmd', {
bgColor: '#ff0',
color: '#000',
extra: 'This is an extra property'
});
现在您可以看到,extra
根本没有在a
中使用,尽管它是作为参数传递给a
的匿名对象的属性。此外,传递给a
的所有参数都是垃圾回收,除非您不打算创建闭包,即从a
返回本地值或函数。