Find file
Fetching contributors…
Cannot retrieve contributors at this time
67 lines (41 sloc) 1.57 KB

inject is a CoffeeScript module used to modify the class inheritance chain dynamically. It sucessfully sets up the prototype chain and object properties.

Standard use

For example, say you have the following class definitions:

class A
    foo: 1

class C extends A
    baz: 2

class B
    bar: 3

Your prototype chain for class C looks like this:

A → C

now, let us say that you want the prototype chain to look like this instead:

A → B → C

all you have to do is use inject:

inject = require('inject')
inject B, C

This makes B extend from A, and then makes C extend from the new B. The new class with the fixed prototype chain is returned. Note that these functions modify the original classes in place: 'inject' is not side effect free.

Multiple injects

You can inject more than one class in one go. inject will set up the entire prototype chain correctly. For example, with the following classes:

class A
class B
class C
class D

the following call

inject D, C, B, A

will result in the following prototype chain:

A → B → C → D

Inheriting vs Injecting

Inject also supplies an 'inherits' function, to change the parent of a class without modifying the prototype chain. For example, using the same classes as the first example, the following call

inject.inherits C, B

creates the following prototype chain

B → C

notice how A has been removed from the prototype chain. inject puts B into the chain before C, while inherits switches C's chain to B's chain.