Coffeescript:在方法参数周围有大括号是什么意思?

时间:2013-08-08 17:19:06

标签: javascript coffeescript

checkbox: (propertyName, {hash}) ->
  ...
  ...

这是什么意思?

我熟悉

的概念
class Person
  constructor: (name) ->
    @name = name

简写

class Person
  constructor: (@name) ->

{parameterName}有类似的魔力吗?

4 个答案:

答案 0 :(得分:6)

这是undocumented parameter destructuring

(propertyName, {hash}) ->

是 - >

的缩写
(propertyName, obj) ->
    hash = obj.hash

这个

(propertyName, {hash, something}) ->

是 - >

的缩写
(propertyName, obj) ->
    hash = obj.hash
    something = obj.something

等等。它的工作原理与normal destructuring非常相似。

答案 1 :(得分:2)

checkbox = (propertyName, {hash}) ->

直接在JS中编译

var checkbox;

checkbox = function(propertyName, _arg) {
  var hash;
  hash = _arg.hash;
};

因此它获取传入对象的属性并将其设置为顶级变量名称。这是否是一件好事还有争议,特别是因为它似乎不是一个记录在案的语言特征(我能找到)

Coffeescript的网站提供了一个有用的工具来调查这样的事情:Try Coffeescript

答案 2 :(得分:2)

如有疑问,我建议js2coffee检查渲染输出。您还可以使用codepen来查找某些操作的结果。例如,将其视为DEMO

foo = (bar, {baz}) ->
  console.log bar+baz

opts = 
  qaz : 'hey'
  baz : 'wowzers'

foo "go go", opts

# console will log "go go wowzers"

呈现为 - >

var foo, opts;

foo = function(bar, _arg) {
  var baz;
  baz = _arg.baz;
  return console.log(bar + baz);
};

opts = {
  qaz: 'hey',
  baz: 'wowzers'
};

foo("go go", opts);

答案 3 :(得分:1)

它使你可以直接使用选项名称,而不必做options.property,即

func = (someValue, {shouldDoSomething, doWork}) ->
   # use option names directly
   doWork someValue if shouldDoSomething

而不是

func = (someValue, options) ->
   options.doWork someValue if options.shouldDoSomething