   constructor: (list) ->
     @[index] = val for val, index in list
     @length = getLength(@)
-    @bind "change", => @length = getLength(@)
   get: (index) -> @[index]
   set: (index, value) ->
     unmark(@, @[index])
     @[index] = value
     mark(@, value)
+    @length = getLength(@)
     @trigger("change:#{index}", value)
     @trigger("set", index, value)
     @trigger("change", @)

  reverse: ->
    Array.prototype.reverse.call(@)
    @trigger("update", @)
    @
  forEach: (fun) ->
    if typeof(Array.prototype.forEach) is 'function'

    value = @[index]
    unmark(@, value)
    Array.prototype.splice.call(@, index, 1)
    @length = getLength(@)
    @trigger("delete", index, value)
    @trigger("change", @)
    value
