首页 > 解决方案 > Javascript 对象选项:function 或 null

问题描述

这个问题之前可能已经被问过,但我真的不知道在谷歌上找到解决方案的正确关键字,所以我所有的研究都返回了0:) 或者更好的是,我所有的研究都以“可选参数”结束,但对于函数。

假设我有这个类:

var Class = function (params) {
    // I get the data somehow
    params.name(data);
}

问题是,不是每次我实例化new Class()我还需要设置name()如下:

new Class({
    name: function (data) {
        // Do something with the data
    }
    ... other params ...
})

但是,使用上述语法,如果我不将 name 参数声明为函数,params.name is not a function则会引发错误:

// Error
new Class({
    ... other params ...
})

我的问题是:有没有办法设置params.name()为可选参数(在对象中),可以是函数或完全不存在(例如null)?就像说:“当你实例化类时:

标签: javascriptfunctionobject

解决方案


在 ES6 中,您可以使用默认函数参数选项,例如

var Class = function(params = {
  name: (x) => x
}) {
  // I get the data somehow
  data='value';
  params.name(data);
}

Class();
Class({name: x => console.log(x)});

希望这会有所帮助!

编辑

是的@brigo,你是对的,抱歉我忽略了这一点。我们实际上是在寻找嵌套的默认值。一个可能的解决方案可能是解构函数内部的对象,例如

var Class = function(params = {}) {
  // I get the data somehow
  data = 'value';
  withDefaultParams = {
    name: (x) => x,
    ...params
  }
  withDefaultParams.name(data);
}

Class();
Class({
  name: x => console.log('non-default')
});
Class({
  others: x => console.log('non-default')
});


推荐阅读