# Class: ComplexObjectType

## ComplexObjectType(jsObject, typeNameopt)

Class representing a complex type of Ignite object.

It is described by COMPOSITE_TYPE.COMPLEX_OBJECT ObjectType.COMPOSITE_TYPE, by a name of the complex type and by a JavaScript Object which is mapped to/from the Ignite complex type.

## Constructor

#### new ComplexObjectType(jsObject, typeNameopt)

Public constructor.

Specifies a JavaScript Object type which will be mapped to/from the complex type. This specification is done using an instance of the JavaScript Object.

If an object of the complex type is going to be received (deserialized), the JavaScript Object must have a constructor without parameters or with optional parameters only.

The JavaScript Object defines a set of fields of the complex type.

By default, the fields have no types specified. It means during operations the Ignite client will try to make automatic mapping between JavaScript types and Ignite object types - according to the mapping table defined in the description of the ObjectType class.

A type of any field may be specified later by setFieldType() method.

By default, the name of the complex type is the name of the JavaScript Object. The name may be explicitely specified using optional typeName parameter in the constructor.

##### Parameters:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`jsObject` | object |  |  | instance of JavaScript Object which will be mapped to/from this complex type.
`typeName` | string | <optional> | null | name of the complex type.

Source:
  - ObjectType.js, line 511

### Extends

- CompositeType

### Methods

#### setFieldType(fieldName, fieldType) → {ComplexObjectType}

Specifies a type of the field in the complex type.

If the type is not specified then during operations the Ignite client will try to make automatic mapping between JavaScript types and Ignite object types - according to the mapping table defined in the description of the ObjectType class.

##### Parameters:

Name | Type | Description
--- | --- | ---
`fieldName` | string | name of the field.
`fieldType` | ObjectType.PRIMITIVE_TYPE | CompositeType | type of the field: either a type code of primitive (simple) type or an instance of class representing non-primitive (composite) type or null (means the type is not specified).

Source:
  - ObjectType.js, line 574

##### Throws:

if error.

Type
  IgniteClientError

##### Returns:

- the same instance of the ComplexObjectType.

Type
  ComplexObjectType