Modelo.js Inheritance Utility

4.2.3 · active · verified Sun Apr 19

Modelo.js is a JavaScript utility providing a robust and performant mechanism for object inheritance, specifically designed to extend Node.js's `util.inherits` with multiple inheritance capabilities. As of version 4.2.3, it allows developers to inherit from multiple base objects seamlessly, addressing a common limitation in standard JavaScript inheritance patterns. A key feature is the `isInstance` method, which is automatically added to instances and serves as a reliable replacement for the native `instanceof` operator when working with multiple inheritance, as `instanceof` is inherently limited to single-prototype chains. The library emphasizes performance, aiming for overhead comparable to `util.inherits` despite its added complexity. While the release cadence isn't explicitly detailed, the version number suggests ongoing maintenance. It differentiates itself by offering a familiar Node.js-style interface while introducing powerful multiple inheritance features, making it suitable for projects requiring flexible object composition.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates basic single and multiple inheritance using `modelo.inherits` and shows how to use the `isInstance` method for multi-inherited objects.

const modelo = require('modelo');

function Base() {
    // Base object constructor
}
Base.prototype.baseMethod = function baseMethod() {
    console.log('Method from base object.');
};

function Extension() {
    // Sub-object constructor
}
modelo.inherits(Extension, Base);

const extInstance = new Extension();
extInstance.baseMethod(); // Outputs: Method from base object.

function MixinOne() {}
MixinOne.prototype.methodOne = function() { console.log('From MixinOne'); };
function MixinTwo() {}
MixinTwo.prototype.methodTwo = function() { console.log('From MixinTwo'); };

function Combined() {}
modelo.inherits(Combined, MixinOne, MixinTwo);

const instance = new Combined();
instance.methodOne(); // Outputs: From MixinOne
instance.methodTwo(); // Outputs: From MixinTwo

console.log(instance.isInstance(Combined)); // true
console.log(instance.isInstance(MixinOne)); // true
console.log(instance.isInstance(MixinTwo)); // true

view raw JSON →