checkbox: (propertyName, {hash}) ->
...
...
这是什么意思?
我熟悉
的概念class Person
constructor: (name) ->
@name = name
简写
class Person
constructor: (@name) ->
{parameterName}有类似的魔力吗?
答案 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