# Contracts

A contract could be either a name or a function that mimics a type (e.g Engine, FuelTank declared in the sample above). If a function is given, its name will be used for binding. Thus, following statement:

```javascript
$.bind(Car).to(Car); // use class Car as contract
```

is equivalent to:

```javascript
$.bind('Car').to(Car); // because Car.name === 'Car'
```

but not equivalent to:

```javascript
$.bind('my car').to(Car); // because Car.name !== 'my car'
```

The binding statements for Engine, FuelTank, and Car can be simplified as following:

```javascript
$.bind(Engine).to(Engine); // equivalent to $.bind('Engine').to(Engine);
$.bind(FuelTank).to(FuelTank); // equivalent to $.bind('FuelTank').to(FuelTank);
$.bind(Car).to(Car).use(Engine, FuelTank); // equivalent to $.bind('Car').to(Car).use('Engine', 'FuelTank');

$(Car).start(); // equivalent to $('Car').start()
```

*Do not use anything that doesn't have any name or use any empty string as contract. Otherwise the container will throw error.*
