在Object中预设选项,并查看它是否在允许的属性中不存在

时间:2013-07-21 22:10:16

标签: javascript object

我正在尝试制作我的对象列表中允许的预设选项列表。这是代码

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');
      }
 }; 

基本上我想要做的是设置选项属性中searchdemand是允许的选项,所以晚于可以做到

 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?
 });

2 个答案:

答案 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
};

jsfiddle with a couple test cases/examples

答案 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返回本地值或函数。