- Notifications
You must be signed in to change notification settings - Fork32
Lightweight JavaScript prototypal inheritance model
License
LinkedInAttic/Fiber
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Take a look at theperformance tests to see how it compares against commonly used inheritance libraries.
[[constructor]].extend( function )
// 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(){}}});
Theinit
method acts as the constructor, which is invoked when an instance is created:
varanimal=newAnimal();// Create a new Animal instance
init
is invoked automatically.
// 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 ofDog
:
varhusky=newDog();husky.scare();// "Dog::I scare you'"
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');}}});
Mixins are a way to add functionality to a Fiber definition. Basically, they address the problem of "multiple inheritance".Read more.
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();
With decorators you can dynamically attach additional properties to an instance.Read more.
Fiber.decorate( instance, decorator_1, ... , decorator_n )
functionCarWithPowerWindows(base){return{roll:function(){}}}Fiber.decorate(myCar,CarWithPowerWindows);
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();}}});
Fiber.noConflict()
Returns a reference to the Fiber object, and sets theFiber
variable to its previous owner.