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

这是什么意思?

我熟悉的概念

class Person
  constructor: (name) ->
    @name = name

有一个简写

class Person
  constructor: (@name) ->

{parameterName} 有类似的魔力吗?

4

4 回答 4

6

这是未记录的参数解构

(propertyName, {hash}) ->

是 --> 的缩写

(propertyName, obj) ->
    hash = obj.hash

和这个

(propertyName, {hash, something}) ->

是 --> 的缩写

(propertyName, obj) ->
    hash = obj.hash
    something = obj.something

等等。它的工作原理与正常的解构非常相似。

于 2013-08-08T17:24:03.670 回答
2

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

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);
于 2013-08-08T17:31:57.703 回答
2

这个

checkbox = (propertyName, {hash}) ->

在 JS 中直接编译成 this

var checkbox;

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

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

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

于 2013-08-08T17:28:09.963 回答
1

它使您可以直接使用选项名称,而不必执行 options.property,即

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

代替

func = (someValue, options) ->
   options.doWork someValue if options.shouldDoSomething
于 2013-08-08T17:31:53.060 回答