Package Exports
- ig-object
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ig-object) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
object.js
object.js provides a set of tools for constructing and maintaining object constrictors and for managing their inheritance relations.
This is an elternative to the ES6 class
syntax in JavaScript and provides
several advantages:
- simple way to define normal and class methods, properties and attributes,
- uniform and minimalistic definition syntax based on basic JavaScript object syntax no special cases or special syntax,
- transparantly based on JavaScript's prototypical inheritance model,
- more granular instance construction (a-la Python's
.__new__(..)
and.__init__(..)
methods) - less restrictive:
new
is optional- all input components are reusable
Disadvantages compared to the class
syntax:
- no sytactic sugar
- a slightly more complicated
super
call method
Usage
var object = require('ig-object')
Create a basic constructor...
// NOTE: new is optional here...
var A = new object.Constructor('A', {})
In JavaScript constructor B
inherits from constructor A
iff
B.prototypes
is prototype of A.prototype
. So to implement inheritance
we simply need to link the prototypes of two constructors via .__proto__
,
Object.create(..)
or other means.
// NOTE: we could simply use A() or new A() here but that would call
// the active constructors if they are defined which might not be
// desirable at definition time...
var B = object.Constructor('B', {__proto__: A.prototype})
var C = object.Constructor('C', Object.create(B.prototype))
var c = C() // or new C()
c instanceof C // -> true
c instanceof B // -> true
c instanceof A // -> true
var Base = object.makeConstructor()
Components
parent(<method>, <this>)
parent(<method>, <name>, <this>)
-> <parent-method>
mixin(<root>, <object>, ...)
-> <object>
mixinFlat(<root>, <object>, ...)
-> <object>
makeConstructor(<name>, <prototype>)
makeConstructor(<name>, <class-prototype>, <prototype>)
-> <constructor>
makeConstructor(<name>, <init-function>)
makeConstructor(<name>, <class-prototype>, <init-function>)
-> <constructor>
License
Copyright (c) 2019, Alex A. Naanou, All rights reserved.