checkbox: (propertyName, {hash}) ->
...
...
这是什么意思?
我熟悉的概念
class Person
constructor: (name) ->
@name = name
有一个简写
class Person
constructor: (@name) ->
{parameterName} 有类似的魔力吗?
checkbox: (propertyName, {hash}) ->
...
...
这是什么意思?
我熟悉的概念
class Person
constructor: (name) ->
@name = name
有一个简写
class Person
constructor: (@name) ->
{parameterName} 有类似的魔力吗?
这是未记录的参数解构
(propertyName, {hash}) ->
是 --> 的缩写
(propertyName, obj) ->
hash = obj.hash
和这个
(propertyName, {hash, something}) ->
是 --> 的缩写
(propertyName, obj) ->
hash = obj.hash
something = obj.something
等等。它的工作原理与正常的解构非常相似。
如有疑问,我建议使用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);
这个
checkbox = (propertyName, {hash}) ->
在 JS 中直接编译成 this
var checkbox;
checkbox = function(propertyName, _arg) {
var hash;
hash = _arg.hash;
};
因此它获取传入的对象的属性并将其设置为顶级变量名。这是否是一件好事还有待商榷,特别是因为它似乎不是一个记录在案的语言特性(我可以找到)
Coffeescript 的网站有一个有用的工具来调查这样的事情:Try Coffeescript
它使您可以直接使用选项名称,而不必执行 options.property,即
func = (someValue, {shouldDoSomething, doWork}) ->
# use option names directly
doWork someValue if shouldDoSomething
代替
func = (someValue, options) ->
options.doWork someValue if options.shouldDoSomething