Skip to content

Repository files navigation

Fiber.js: Lightweight, fast, JavaScript inheritance model

Build Status

Why another JavaScript inheritance library?

Take a look at the performance tests to see how it compares against commonly used inheritance libraries.

Inheritance

Usage

[[constructor]].extend( function )

Example

// Animal base classvarAnimal=Fiber.extend(function(){return{// The `init` method serves as the constructor.init: function(){// Privatefunctionprivate1(){}functionprivate2(){}// Privilegedthis.privileged1=function(){}this.privileged2=function(){}},// Publicmethod1: function(){}}});

The init method acts as the constructor, which is invoked when an instance is created:

varanimal=newAnimal();// Create a new Animal instance

init is invoked automatically.

Inheritance

// Extend the Animal class.varDog=Animal.extend(function(){return{// Override base class `method1`method1: function(){console.log('dog::method1');},scare: function(){console.log('Dog::I scare you');}}});

Create an instance of Dog:

varhusky=newDog();husky.scare();// "Dog::I scare you'"

Accessing parent prototype

Every class definition has access to the parent's prototype via the first argument passed into the function:

// Extend the Animal class.varDog=Animal.extend(function(base){return{// Override base class `method1`method1: function(){// Call the parent methodbase.method1.call(this);},scare: function(){console.log('Dog::I scare you');}}});

Mixin

Mixins are a way to add functionality to a Fiber definition. Basically, they address the problem of "multiple inheritance". Read more.

Usage

Fiber.mixin( object, function1, function2, ... )

varFoo=Fiber.extend(function(base){return{method1: function(){}}});varf=newFoo();f.method1();varmix1=function(base){return{method2: function(){}}}Fiber.mixin(Foo,mix1);f.method2();

Decorators

With decorators you can dynamically attach additional properties to an instance. Read more.

Usage

Fiber.decorate( instance, decorator_1, ... , decorator_n )

functionCarWithPowerWindows(base){return{roll: function(){}}}Fiber.decorate(myCar,CarWithPowerWindows);

Proxy

Usage

Fiber.proxy( base, instance )

// Extend the Animal class;varDog=Animal.extend(function(base){return{init: function(){this.base=Fiber.proxy(base,this);this.base.init();}}});

noConflict

Usage

Fiber.noConflict()

Returns a reference to the Fiber object, and sets the Fiber variable to its previous owner.

About

Lightweight JavaScript prototypal inheritance model

Resources

Stars

282 stars

Watchers

20 watching

Forks

Releases

Packages

Used by

Contributors

Languages