EZ Objects v0.6.8
Under development, but completely useable.
Principles of Operation
This module, when required, is a function that takes a single object argument. At present, that object can have the
following keys:
- name - A string containing the name of the desired class object (required)
- extends - An object that you wish the class to extend from (optional, note this is the class itself, not the name)
- properties - An array of properties for which the class will have getters/setters/initialization implemented (optional)
Each property in the properties array is an object that can have the following keys:
- name - The name of the property (required)
- type - The type of the property (required, can be string, int, float, boolean, Array, or any other object name)
- default - The default initialized value (optional)
Default defaults are:
- string - ''
- int - 0
- float - 0
- boolean - false
- Array - []
- Any others - null
Note that the created objects are added to the global space, being global
(node) or window
(browser), though you'll
have to browserify or equivalent to use in browser. Like normal classes, they can have other properties/methods added
externally using the prototype, though note that if you want external prototype-added properties to be initialized, you'll
have to rewrite the init() function manually. Alternatively, you can just extend the class and init the parent with
super
, see examples below.
Examples
Creating a class
const ezobjects = require('ezobjects');
ezobjects({
name: 'DatabaseRecord',
properties: [
{ name: 'id', type: 'int' }
]
});
const a = new DatabaseRecord();
console.log(a);
Output
DatabaseRecord { _id: 0 }
Creating a class that's extended from another class
ezobjects({
name: 'Person',
extends: DatabaseRecord,
properties: [
{ name: 'firstName', type: 'string' },
{ name: 'lastName', type: 'string' },
{ name: 'checkingBalance', type: 'float' },
{ name: 'permissions', type: 'Array' },
{ name: 'favoriteDay', type: 'Date' }
]
});
const b = new Person();
console.log(b);
Output
Person {
_id: 0,
_firstName: '',
_lastName: '',
_checkingBalance: 0,
_permissions: [],
_favoriteDay: null }
Using an intializer object passed to constructor
const c = new Person({
id: 1,
firstName: 'Rich',
lastName: 'Lowe',
checkingBalance: 4.87,
permissions: [1, 2, 3],
favoriteDay: new Date('01-01-2018')
});
console.log(c);
Output
Person {
_id: 1,
_firstName: 'Rich',
_lastName: 'Lowe',
_checkingBalance: 4.87,
_permissions: [ 1, 2, 3 ],
_favoriteDay: 2018-01-01T06:00:00.000Z }
Using the auto-created setters
const d = new Person();
d.id(2);
d.firstName('Bert');
d.lastName('Reynolds');
d.checkingBalance(91425518.32);
d.permissions([1, 4]);
d.favoriteDay(new Date('06-01-2017'));
console.log(d);
Output
Person {
_id: 2,
_firstName: 'Bert',
_lastName: 'Reynolds',
_checkingBalance: 91425518.32,
_permissions: [ 1, 4 ],
_favoriteDay: 2017-06-01T05:00:00.000Z }
Using the auto-created getters
console.log(`ID: ${d.id()}`);
console.log(`First Name: ${d.firstName()}`);
console.log(`Last Name: ${d.lastName()}`);
console.log(`Checking Balance: $${d.checkingBalance()}`);
console.log(`Permissions: ${d.permissions().join(`, `)}`);
console.log(`Favorite Day: ${d.favoriteDay().toString()}`);
Output
ID: 2
First Name: Bert
Last Name: Reynolds
Checking Balance: $91425518.32
Permissions: 1, 4
Favorite Day: Thu Jun 01 2017 00:00:00 GMT-0500 (CDT)
Adding capability by using the class prototype
DatabaseRecord.prototype.table = function (arg) {
if ( arg === undefined )
return this._table;
this._table = arg;
};
DatabaseRecord.prototype.init = function (data = {}) {
this.id(data.id || 0);
this.table(data.table || '');
};
const e = new DatabaseRecord();
console.log(e);
Output
DatabaseRecord { _id: 0, _table: '' }
Adding capability by extending the class
class DatabaseRecord2 extends DatabaseRecord {
constructor(data = {}) {
super(data);
}
init(data = {}) {
super.init(data);
this.test('Test');
}
test(arg) {
if ( arg === undefined )
return this._test;
this._test = arg;
}
}
const f = new DatabaseRecord2();
console.log(f);
Output
DatabaseRecord2 { _id: 0, _table: '', _test: 'Test' }