mirror of
				https://github.com/flynx/object.js.git
				synced 2025-10-31 19:40:09 +00:00 
			
		
		
		
	
		
			
				
	
	
	
		
			2.8 KiB
		
	
	
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			2.8 KiB
		
	
	
	
	
		
			Executable File
		
	
	
	
	
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:
- newis optional
- all input components are reusable
 
Disadvantages compared to the class syntax:
- no sytactic sugar
- a slightly more complicated supercall 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.Constructor('Base', {
    get prop(){
        return 123 },
    method: function(){
        console.log('Base.method()') },
    // initializer...
    __init__: function(){
        this.base_attribute = 321
    },
})
var Item = object.Constructor('Item', {
    // inherit from Base...
    __proto__: Base.prototype,
    __init__: function(){
        // call the "super" method...
        object.parent(this.__init__, this).call(this)
        this.item_attribute = 333
    },
})
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>
License
Copyright (c) 2019, Alex A. Naanou,
All rights reserved.