added Mixin.* static methods...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2020-11-19 16:44:36 +03:00
parent fe8f969058
commit 6b8e46d302
2 changed files with 20 additions and 6 deletions

View File

@ -1182,9 +1182,23 @@ function(base, ...objects){
// //
// NOTE: the constructor will allways create a new .data object but will // NOTE: the constructor will allways create a new .data object but will
// not do a deep copy into it -- see mixin(..) / mixinFlat(..) // not do a deep copy into it -- see mixin(..) / mixinFlat(..)
//
// XXX should this move to its own modue???
var Mixin = var Mixin =
module.Mixin = module.Mixin =
Constructor('Mixin', { Constructor('Mixin', {
// static methods...
// XXX should we add the above mixin funcs as static methods here???
// ...not sure yet...
// XXX if this proves usefull should we chose one or keep both locations???
// XXX EXPERIMENTAL...
mixin,
mixinFlat,
mixout,
mixins,
hasMixin,
}, {
name: null, name: null,
// mixin data... // mixin data...
@ -1200,17 +1214,17 @@ Constructor('Mixin', {
// base API... // base API...
// //
isMixed: function(target){ isMixed: function(target){
return hasMixin(target, this.data) }, return this.constructor.hasMixin(target, this.data) },
mixout: function(target){ mixout: function(target){
return mixout(target, this.data) }, return this.constructor.mixout(target, this.data) },
// mix into target... // mix into target...
__call__: function(_, target, mode=this.mode){ __call__: function(_, target, mode=this.mode){
typeof(target) == typeof('str') typeof(target) == typeof('str')
&& ([_, mode, target] = arguments) && ([_, mode, target] = arguments)
return mode == 'flat' ? return mode == 'flat' ?
mixinFlat(target, this.data) this.constructor.mixinFlat(target, this.data)
: mixin(target, this.data) }, : this.constructor.mixin(target, this.data) },
__init__: function(name, ...data){ __init__: function(name, ...data){
// Mixin(name, mode, ...) -- handle default mode... // Mixin(name, mode, ...) -- handle default mode...
@ -1224,7 +1238,7 @@ Constructor('Mixin', {
// explicitly overwritten... // explicitly overwritten...
Object.defineProperty(this, 'name', { value: name }) Object.defineProperty(this, 'name', { value: name })
// create/merge .data... // create/merge .data...
this.data = mixinFlat({}, this.data = this.constructor.mixinFlat({},
...data.map(function(e){ ...data.map(function(e){
// handle bare objects and mixins differently... // handle bare objects and mixins differently...
return e instanceof Mixin ? return e instanceof Mixin ?

View File

@ -1,6 +1,6 @@
{ {
"name": "ig-object", "name": "ig-object",
"version": "5.4.4", "version": "5.4.5",
"description": "", "description": "",
"main": "object.js", "main": "object.js",
"scripts": { "scripts": {