docs: function AssociationAttribute() {
    /**
     * It is a readonly property with the Entity that is associated with the
     * current AssociationAttribute.
     * @name
     * module:back4app-entity/models/attributes/types.AssociationAttribute#Entity
     * @type {!Class}
     * @readonly
     * @throws {module:back4app-entity/models/errors.EntityNotFoundError}
     * @example
     * var associationAttribute = new AssociationAttribute(
     *   'associationAttribute',
     *   MyEntity
     * );
     * console.log(associationAttribute.Entity == MyEntity) // Logs "true"
     */
    this.Entity = null;
  
    var _Entity = null;
    Object.defineProperty(this, 'Entity', {
      get: function () {
        if (typeof _Entity === 'string') {
          _Entity = models.Entity.getSpecialization(_Entity);
        }
  
        return _Entity;
      },
      set: function () {
        throw new Error(
          'Entity property of an AssociationAttribute instance cannot be changed'
        );
      },
      enumerable: true,
      configurable: false
    });
  
    var argumentsArray = Array.prototype.slice.call(arguments);
  
    expect(argumentsArray).to.have.length.within(
      1,
      5,
      'Invalid arguments length when creating an AssociationAttribute (it has ' +
      'to be passed from 1 to 5 arguments)'
    );
  
    if (argumentsArray.length === 1) {
      var associationAttribute = argumentsArray[0];
  
      expect(associationAttribute).to.be.an(
        'object',
        'Invalid argument type when creating an Attribute (it has to be an ' +
        'object)'
      );
  
      associationAttribute = objects.copy(associationAttribute);
  
      _Entity = associationAttribute.entity;
      if (_Entity) {
        delete associationAttribute.entity;
      } else {
        expect(associationAttribute).to.have.ownProperty(
          'Entity',
          'Property "entity" or "Entity" is required when creating an ' +
          'AssociationAttribute'
        );
  
        _Entity = associationAttribute.Entity;
        delete associationAttribute.Entity;
      }
  
      argumentsArray[0] = associationAttribute;
    } else {
      _Entity = argumentsArray.splice(1, 1)[0];
    }
  
    if (typeof _Entity !== 'string') {
      expect(_Entity).to.be.a(
        'function',
        'Invalid argument "entity" when creating an AssociationAttribute (it ' +
        'has to be a Class)'
      );
  
      expect(classes.isGeneral(models.Entity, _Entity)).to.equal(
        true,
        'Invalid argument "entity" when creating an AssociationAttribute (it ' +
        'has to be a subclass of Entity)'
      );
    }
  
    Attribute.apply(this, argumentsArray);
  }