- Notifications
You must be signed in to change notification settings - Fork31
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.
About
Lightweight JavaScript prototypal inheritance model
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors4
Uh oh!
There was an error while loading.Please reload this page.