javascript - 在 CoffeeScript 中为可选参数的字段设置默认值的简洁方法是什么?

标签 javascript coffeescript

我有一个带有此签名的函数:

createUiLabel = (text, fontProperties) ->

我希望 fontProperties 是可选的,如果未定义,则默认为如下所示:

{
  size: defaultSize
  family: defaultFamily
  color: defaultColor
}

我知道我可以通过像这样的解构来实现这一点:

createUiLabel = (text, fontProperties = {
  size: defaultSize
  family: defaultFamily
  color: defaultColor
}) ->

但是能够像这样调用这个函数真的很方便:

createUiLabel("foo", {size: 14})

并且让颜色系列仍然使用默认值。但似乎传入此对象会覆盖其他属性,因此 colorfamily 变得未定义。当您只想更改一个属性时,必须定义这些其他属性,从外部来看是非常烦人的。如何轻松实现该函数,以便前面的调用将为我提供 colorfamily 的默认值?

这看起来类似于 Most concise way to assign a value from a variable only if it exists in CoffeeScript?不同之处在于,中间有一个可选对象,我试图从中提取可选字段。

最佳答案

我会使用存在 operator 进行显式复合赋值在空默认值上:

createUiLabel = (text, fontProperties = {}) ->
    fontProperties.size ?= defaultSize
    fontProperties.color ?= defaultColor
    fontProperties.family ?= defaultFamily
    …

关于javascript - 在 CoffeeScript 中为可选参数的字段设置默认值的简洁方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24250158/

相关文章:

javascript - Coffeescript 未捕获引用

javascript - 根据 jquery/javascript 中的显示值设置下拉列表的选定值

javascript - 让多个页面互相交谈

javascript - 构建 Coffeescript 并使用 @ 关键字

javascript - Rails 5 Live Search with Keyup 丢失输入焦点 Turbolinks

http - ngMock 无法识别请求

javascript - 为什么我无法访问 Chrome 内置函数 $?

javascript - TypeScript React.FC<Props> 混淆

Javascript 模块继承

javascript - 迭代用户选项并将它们分配给 CoffeeScript 中的对象实例