         lengthChanged = target.length isnt currentLength
         return true  if key is 'length' and not lengthChanged
 
+      return true  if typeof key is 'symbol' or /^__|__$/.test key
+
       if root = receiver[KDData.NAME]
         key = "#{root}.#{key}"
       else
         root = ''
-
-      return true  if typeof key is 'symbol' or /^__|__$/.test key
 
       if lengthChanged
         prefix = if key.indexOf('.') >= 0 then "#{root}." else ''


      base.emit 'update', [ key ]
      return true


    getPrototypeOf: (target) ->

      return KDData.prototype


  proxyHandler = (base) ->

    set: (target, key, value, receiver) ->

      if base.isArray
        currentLength = target.length

      if value instanceof Object and value not instanceof Date
        if root = receiver[KDData.NAME]
          key = "#{root}.#{key}"
        value = createProxy value, proxyHandler base
        Object.defineProperty value, KDData.NAME, {
          value: key, configurable: yes
        }

      target[key] = value

