code: function ComplexAspect(complexObject, parent, parentProperty) {
      if (!complexObject) {
        throw new Error("The  ComplexAspect ctor requires an entity as its only argument.");
      }
      if (complexObject.complexAspect) {
        return complexObject.complexAspect;
      }
      // if called without new
      if (!(this instanceof ComplexAspect)) {
        return new ComplexAspect(complexObject, parent, parentProperty);
      }
  
      // entityType should already be on the entity from 'watch'
      this.complexObject = complexObject;
      complexObject.complexAspect = this;
  
      // TODO: keep public or not?
      this.originalValues = {};
  
      // if a standalone complexObject
      if (parent != null) {
        this.parent = parent;
        this.parentProperty = parentProperty;
      }
  
      var complexType = complexObject.complexType;
      if (!complexType) {
        var typeName = complexObject.prototype._$typeName;
        if (!typeName) {
          throw new Error("This entity is not registered as a valid ComplexType");
        } else {
          throw new Error("Metadata for this complexType has not yet been resolved: " + typeName);
        }
      }
      var complexCtor = complexType.getCtor();
      __modelLibraryDef.getDefaultInstance().startTracking(complexObject, complexCtor.prototype);
  
    }
docs: An ComplexAspect instance is associated with every complex object instance and is accessed via the complex object's 'complexAspect' property.
  
  The ComplexAspect itself provides properties to determine the parent object, parent property and original values for the complex object.
  
  A ComplexAspect will almost never need to be constructed directly. You will usually get an ComplexAspect by accessing
  an entities 'complexAspect' property.  This property will be automatically attached when an complex object is created as part of an
  entity via either a query, import or EntityManager.createEntity call.
  @example
  assume address is a complex property on the 'Customer' type
  var aspect = aCustomer.address.complexAspect;
  aCustomer === aspect.parent;
  @class ComplexAspect