 
     vAttrs = @getProperties()
     for k,v of vAttrs
-      continue if !vAttrs.hasOwnProperty(k) or (k in aExclude)
+      continue if k in aExclude
       continue if v and v.name and (v.name in aExclude)
       @assignPropertyTo(dest, @, k, @[k], vAttrs)
     dest._assign(@) if isFunction dest._assign

    @assignPropertyTo(@, options, name, value, attrs, skipDefaultValue)
    return

  mergeTo: (dest, aExclude, skipDefaultValue)->
    if isArray dest
      aExclude = dest
      dest = {}
    else if isBoolean dest
      skipDefaultValue = dest
      aExclude = []
      dest = {}

    if isString aExclude
      aExclude = [aExclude]
    else if isBoolean aExclude
      skipDefaultValue = aExclude
      aExclude = []
    else if not isArray aExclude
      aExclude = []

getkeys         = Object.keys

module.exports  = class AbstractPropertyManager

  nonExported1stChar: '$'

  constrcutor: ->
    @initialize.apply @, arguments
