我有这样的事情:
class @Cat
defaults:
name: ''
weight: 0
constructor: ( @options ) ->
$.each @.defaults, (key, val) =>
@options[key] = val unless @options.hasOwnProperty(key)
我想用
$.each (array, callback), (index, value) ->
而不是
$.each (array, callback), (index, value) =>
并使用类变量@options
,但显然@
指的是数组。
溶液
答案 0 :(得分:2)
您似乎无法访问属于该类实例的options
,对吗?
你知道这是因为jQuery.each将this
设置为val变量的对象包装版本,因此@options
在该回调中不起作用。
在下面的示例中,稍有变化是我已关闭变量each
上的opts
回调,这将允许您的循环引用@options
的内容虽然this
已被更改。
class Cat
defaults:
name: 'tabby'
weight: 5
constructor: (@options) ->
opts = @options
$.each @defaults, (key, val) ->
opts[key] = val unless opts.hasOwnProperty(key)
c = new Cat(name: 'fluffy')
console.log c.options
注意,不需要双箭头:)在您的情况下,双箭头不会受到影响,因为您访问变量val
而不是使用@
来引用变量值{当前的迭代,但是当你不是绝对必要时,你试图摆脱=>
是正确的。
在这个小提琴上试试:http://jsfiddle.net/chicagogrooves/72fa3/
那就是说,我想提一下,对于覆盖默认值的情况,您可以使用jquery.extend而不是手动编写循环。这是一个很常见的事情,它是许多库的一部分,而不是你需要手工编写的东西。但我想更彻底地解释,因为双箭头和this
是很好的概念。