build/breeze.debug.js
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);

  }
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);

  }
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 ) ; }
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
An ComplexAspect instance is associated with every complex object instance and is accessed via the complex object s complexAspect property .