Skip to content

LinkedInAttic/Fiber

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 class
var Animal = Fiber.extend(function() {
    return {
        // The `init` method serves as the constructor.
        init: function() {
            // Private
            function private1(){}
            function private2(){}

            // Privileged
            this.privileged1 = function(){}
            this.privileged2 = function(){}
        },
        // Public
        method1: function(){}
    }
});

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

var animal = new Animal(); // Create a new Animal instance

init is invoked automatically.

Inheritance

// Extend the Animal class.
var Dog = 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:

var husky = new Dog();
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.
var Dog = Animal.extend(function( base ) {
    return {
        // Override base class `method1`
        method1: function(){
            // Call the parent method
            base.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, ... )

var Foo = Fiber.extend(function(base) {
    return {
        method1: function(){}
    }
});

var f = new Foo();
f.method1();

var mix1 = 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 )

function CarWithPowerWindows(base) {
    return {
        roll: function() {}
    }
}

Fiber.decorate(myCar, CarWithPowerWindows);

Proxy

Usage

Fiber.proxy( base, instance )

// Extend the Animal class;
var Dog = 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

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •