[英]coffeescript class variable visibility
我有這樣的事情:
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
,但顯然@
指向數組。 解?
看來您在訪問屬於該類實例的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
是很好的概念,就知道了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.