mirror of
				https://github.com/flynx/object.js.git
				synced 2025-10-31 03:20:09 +00:00 
			
		
		
		
	made mixin configure better + some tweaking + docs...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									30e8197e0f
								
							
						
					
					
						commit
						e25658db0f
					
				| @ -130,7 +130,7 @@ class B extends A { | |||||||
| 		- [`<object>.__init__(..)`](#object__init__) | 		- [`<object>.__init__(..)`](#object__init__) | ||||||
| 		- [`<object>.__call__(..)`](#object__call__) | 		- [`<object>.__call__(..)`](#object__call__) | ||||||
| 	- [Components](#components) | 	- [Components](#components) | ||||||
| 		- [`STOP`](#stop) | 		- [`STOP` / `STOP(..)`](#stop--stop) | ||||||
| 		- [`sources(..)`](#sources) | 		- [`sources(..)`](#sources) | ||||||
| 		- [`values(..)`](#values) | 		- [`values(..)`](#values) | ||||||
| 		- [`parent(..)`](#parent) | 		- [`parent(..)`](#parent) | ||||||
| @ -554,7 +554,7 @@ var l = object.RawInstance(null, Array, 'a', 'b', 'c') | |||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ### `STOP` | ### `STOP` / `STOP(..)` | ||||||
| 
 | 
 | ||||||
| Used in [`sources(..)`](#sources), [`values(..)`](#values) and  | Used in [`sources(..)`](#sources), [`values(..)`](#values) and  | ||||||
| [`mixins(..)`](#mixins) to stop the search before it reaches the top of  | [`mixins(..)`](#mixins) to stop the search before it reaches the top of  | ||||||
|  | |||||||
							
								
								
									
										36
									
								
								object.js
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								object.js
									
									
									
									
									
								
							| @ -1149,21 +1149,30 @@ function(base, ...objects){ | |||||||
| //	Mixin(name, data, ..)
 | //	Mixin(name, data, ..)
 | ||||||
| //		-> mixin
 | //		-> mixin
 | ||||||
| //
 | //
 | ||||||
| //	Apply the mixin to an object...
 | //	Create a new mixin setting the default mode...
 | ||||||
|  | //	Mixin(name, mode, data, ..)
 | ||||||
|  | //		-> mixin
 | ||||||
|  | //
 | ||||||
|  | //
 | ||||||
|  | //	Apply mixin in the prototype chain (default)...
 | ||||||
| //	mixin(obj)
 | //	mixin(obj)
 | ||||||
|  | //	mixin('proto', obj)
 | ||||||
| //		-> obj
 | //		-> obj
 | ||||||
| //
 | //
 | ||||||
| //	mixin(mode, obj)
 | //	Copy date from mixin into obj directly...
 | ||||||
| //	mixin(obj, mode)
 | //	mixin('flat', obj)
 | ||||||
| //		-> obj
 | //		-> obj
 | ||||||
| //
 | //
 | ||||||
| //
 | //
 | ||||||
|  | //
 | ||||||
| // Example:
 | // Example:
 | ||||||
| //
 | //
 | ||||||
| // 		var BasicMixin = Mixin('BasicMixin', {
 | // 		var BasicMixin = Mixin('BasicMixin', {
 | ||||||
| // 			...
 | // 			...
 | ||||||
| // 		})
 | // 		})
 | ||||||
| //
 | //
 | ||||||
|  | // 		...
 | ||||||
|  | //
 | ||||||
| //		var o = {
 | //		var o = {
 | ||||||
| //			...
 | //			...
 | ||||||
| //		}
 | //		}
 | ||||||
| @ -1171,14 +1180,25 @@ function(base, ...objects){ | |||||||
| //		BasicMixin(o)
 | //		BasicMixin(o)
 | ||||||
| //
 | //
 | ||||||
| //
 | //
 | ||||||
|  | // NOTE: the constructor will allways create a new .data object but will 
 | ||||||
|  | // 		not do a deep copy into it -- see mixin(..) / mixinFlat(..)
 | ||||||
| var Mixin = | var Mixin = | ||||||
| module.Mixin = | module.Mixin = | ||||||
| Constructor('Mixin', { | Constructor('Mixin', { | ||||||
| 	name: null, | 	name: null, | ||||||
|  | 
 | ||||||
|  | 	// mixin data...
 | ||||||
| 	data: null, | 	data: null, | ||||||
| 
 | 
 | ||||||
|  | 	// data "copy" mode...
 | ||||||
|  | 	//
 | ||||||
|  | 	// This can be:
 | ||||||
|  | 	// 	'proto'		- mix data into prototype chain (default)
 | ||||||
|  | 	// 	'flat'		- use mixinFlat(..) to copy data
 | ||||||
| 	mode: 'proto', | 	mode: 'proto', | ||||||
| 
 | 
 | ||||||
|  | 	// base API...
 | ||||||
|  | 	//
 | ||||||
| 	isMixed: function(target){ | 	isMixed: function(target){ | ||||||
| 		return hasMixin(target, this.data) }, | 		return hasMixin(target, this.data) }, | ||||||
| 	mixout: function(target){ | 	mixout: function(target){ | ||||||
| @ -1193,12 +1213,20 @@ Constructor('Mixin', { | |||||||
| 			: mixin(target, this.data) }, | 			: mixin(target, this.data) }, | ||||||
| 
 | 
 | ||||||
| 	__init__: function(name, ...data){ | 	__init__: function(name, ...data){ | ||||||
|  | 		// Mixin(name, mode, ...) -- handle default mode...
 | ||||||
|  | 		typeof(data[0]) == typeof('str') | ||||||
|  | 			&& (this.mode = data.shift()) | ||||||
|  | 		// name...
 | ||||||
| 		// NOTE: .defineProperty(..) is used because this is a function
 | 		// NOTE: .defineProperty(..) is used because this is a function
 | ||||||
| 		// 		and function's .name is not too configurable...
 | 		// 		and function's .name is not too configurable...
 | ||||||
| 		// XXX do we need to configure this prop better???
 | 		// NOTE: we do not need to configure this any more, .defineProperty(..)
 | ||||||
|  | 		// 		merges the descriptor into the original keeping any values not
 | ||||||
|  | 		// 		explicitly overwritten...
 | ||||||
| 		Object.defineProperty(this, 'name', { value: name }) | 		Object.defineProperty(this, 'name', { value: name }) | ||||||
|  | 		// create/merge .data...
 | ||||||
| 		this.data = mixinFlat({},  | 		this.data = mixinFlat({},  | ||||||
| 			...data.map(function(e){  | 			...data.map(function(e){  | ||||||
|  | 				// handle bare objects and mixins differently...
 | ||||||
| 				return e instanceof Mixin ?  | 				return e instanceof Mixin ?  | ||||||
| 					e.data  | 					e.data  | ||||||
| 					: e })) }, | 					: e })) }, | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "ig-object", |   "name": "ig-object", | ||||||
|   "version": "5.4.3", |   "version": "5.4.4", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "main": "object.js", |   "main": "object.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user