javascript - 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
)?就像说:“当你实例化类时:
- 如果你声明
name: function (data) {}
=> then:params.name(data)
是一个函数 - 如果你跳过
name
=> 无论如何都可以(不会抛出错误)”
解决方案
在 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')
});
推荐阅读
- visual-c++ - 在 C++ 中更改 MFC 菜单弹出文本
- c# - 在任务栏应用程序悬停时显示控件
- c++ - 类型定义 X
=T::UserType1,但如果不适用,typedef X =用户类型2 - mdx - MDX 格式化结果
- angular - 带有LatestFrom警告的Angular7 Ngrx6
- json - 如何在同一条消息中多次循环不同类型的嵌套 JSON 对象
- tensorflow - 在评估预训练的 RPN 期间获取“图形已完成且无法修改”
- python - 使用没有id作为主键的python库flask-rest-jsonapi
- android - 使用 Fragment WebView 在 ViewPager 中删除和添加新选项卡
- java - Android App Crash GSL MEM ERROR,如何从logcat中破译