簡體   English   中英

coffeescript類變量可見性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM