JSFiddle - React, Tailwind, and code Playground
by andypotanin
JavaScript
console.clear();
function Core(name, settings) {
this.name = name;
this.settings = settings;
this.type = 'Core';
//this.context_test = function () { console.log('I am in', this); }
//console.log('Core', this);
return this;
}
Object.defineProperties( Core.prototype, {
Module: {
get: function Module() {
// Create object in Core's context
return Object.create( this, arguments.callee.prototype );
}
}
})
Object.defineProperties( Core.prototype.Module.prototype, {
name: { value: arguments.callee },
do_stuff: { value: function( stuff ) { this._stuff = stuff; return this; } },
settings: { value: this.settings || {} },
path: { value: [ this.name, arguments.callee ] }
SubModule: {
get: function SubModule(name, settings) {
// Create object in Core's context
return Object.create( this, arguments.callee.prototype );
}
}
});
var myCore = new Core('Chevy', 'asdf');; // has .Module()
var myModule = myCore.Module.do_stuff( 'stuff' ); // type: Module, .SubModule()
console.log( myModule );
console.log( myCore );
//var myModule = myCore.Module('Denali'); // type: Module, .Module()
// Non-instantiated is ran within "prototype" context and has access to self in "this".
//var myModule = Core.prototype.Module('Denali');
//var mySubModule = new myModule.SubModule( 'Hybrid-Hoe' );
var created = Object.create(myCore, {
name: {
value: 'HoodChevy',
enumerable: true
},
own_thing: {
value: 'blah',
enumerable: false
},
amother_thing: {
value: 'blah visible',
enumerable: true
}
});
//console.log( Object.keys( created ) );
//console.log( Object.keys( created.__proto__ ) );
//console.log( created.__proto__ );
//console.log(created);
//myCore.context_test();
//created.context_test();
//console.log(created instanceof Core);