mirror of
https://github.com/flynx/object.js.git
synced 2025-10-30 19:10:11 +00:00
notes and comments...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
c73b453205
commit
027ccd8e86
39
object.js
39
object.js
@ -54,20 +54,21 @@ function(text, tab_size, keep_tabs){
|
|||||||
KEEP_TABS
|
KEEP_TABS
|
||||||
: keep_tabs)
|
: keep_tabs)
|
||||||
* tab_size
|
* tab_size
|
||||||
tab_size = ' '.repeat(tab_size)
|
// prepare text...
|
||||||
text = tab_size != '' ?
|
var tab = ' '.repeat(tab_size)
|
||||||
text.replace(/\t/g, tab_size)
|
text = tab != '' ?
|
||||||
|
text.replace(/\t/g, tab)
|
||||||
: text
|
: text
|
||||||
|
|
||||||
var lines = text.trim().split(/\n/)
|
var lines = text.trim().split(/\n/)
|
||||||
|
// count common indent...
|
||||||
var l = lines
|
var l = lines
|
||||||
.reduce(function(l, e, i){
|
.reduce(function(l, e, i){
|
||||||
var indent = e.length - e.trimLeft().length
|
var indent = e.length - e.trimLeft().length
|
||||||
return e.trim().length == 0
|
return e.trim().length == 0
|
||||||
// ignore 0 indent of first/last lines...
|
// ignore 0 indent of first line...
|
||||||
|| (i == 0 && indent == 0) ?
|
|| (i == 0 && indent == 0) ?
|
||||||
l
|
l
|
||||||
// last line -- ...
|
// last line -- ignore keep_tabs if lower indent...
|
||||||
: i == lines.length-1 && indent > l ?
|
: i == lines.length-1 && indent > l ?
|
||||||
Math.max(l-keep_tabs, 0)
|
Math.max(l-keep_tabs, 0)
|
||||||
// initial state...
|
// initial state...
|
||||||
@ -75,7 +76,7 @@ function(text, tab_size, keep_tabs){
|
|||||||
indent
|
indent
|
||||||
// min...
|
// min...
|
||||||
: Math.min(l, indent) }, -1)
|
: Math.min(l, indent) }, -1)
|
||||||
|
// normalize...
|
||||||
return lines
|
return lines
|
||||||
.map(function(line, i){
|
.map(function(line, i){
|
||||||
return i == 0 ?
|
return i == 0 ?
|
||||||
@ -415,6 +416,8 @@ function(base, object){
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
// NOTE: this is the opposite to mixin(..)
|
// NOTE: this is the opposite to mixin(..)
|
||||||
|
// NOTE: this used mixins(..) / match(..) to find the relevant mixins,
|
||||||
|
// see those for more info...
|
||||||
var mixout =
|
var mixout =
|
||||||
module.mixout =
|
module.mixout =
|
||||||
function(base, ...objects){
|
function(base, ...objects){
|
||||||
@ -471,7 +474,8 @@ function(base, ...objects){
|
|||||||
// Example:
|
// Example:
|
||||||
// // new is optional...
|
// // new is optional...
|
||||||
// var l = new makeRawInstance(null, Array, 'a', 'b', 'c')
|
// var l = new makeRawInstance(null, Array, 'a', 'b', 'c')
|
||||||
// NOTE: the following are not the same:
|
// NOTE: the following are not the same in structure but functionally
|
||||||
|
// are identical:
|
||||||
// var C = Constructor('C', function(){ .. })
|
// var C = Constructor('C', function(){ .. })
|
||||||
// and
|
// and
|
||||||
// var C2 = Constructor('C2', { __call__: function(){ .. } })
|
// var C2 = Constructor('C2', { __call__: function(){ .. } })
|
||||||
@ -502,7 +506,9 @@ function(context, constructor, ...args){
|
|||||||
: /\[native code\]/.test(constructor.toString()) ?
|
: /\[native code\]/.test(constructor.toString()) ?
|
||||||
Reflect.construct(constructor, args)
|
Reflect.construct(constructor, args)
|
||||||
// callable instance...
|
// callable instance...
|
||||||
// NOTE: we need to isolate the callable from instances...
|
// NOTE: we need to isolate the callable from instances, thus we
|
||||||
|
// reference 'constructor' directly rather than using
|
||||||
|
// 'this.constructor'...
|
||||||
: (constructor.prototype instanceof Function
|
: (constructor.prototype instanceof Function
|
||||||
|| constructor.prototype.__call__ instanceof Function) ?
|
|| constructor.prototype.__call__ instanceof Function) ?
|
||||||
_mirror_doc(
|
_mirror_doc(
|
||||||
@ -649,21 +655,6 @@ function(context, constructor, ...args){
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Motivation:
|
|
||||||
// The general motivation here is to standardise the constructor
|
|
||||||
// protocol and make a single simple way to go with minimal variation.
|
|
||||||
// This is due to the JavaScript base protocol though quite simple,
|
|
||||||
// being too flexible making it very involved to produce objects in a
|
|
||||||
// consistent manner by hand, especially in long running projects,
|
|
||||||
// in turn spreading all the refactoring over multiple sites and styles.
|
|
||||||
//
|
|
||||||
// This removes part of the flexibility and in return gives us:
|
|
||||||
// - single, well defined protocol
|
|
||||||
// - one single spot where all the "magic" happens
|
|
||||||
// - full support for existing JavaScript ways of doing things
|
|
||||||
// - easy refactoring without touching the client code
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// NOTE: this sets the proto's .constructor attribute, thus rendering it
|
// NOTE: this sets the proto's .constructor attribute, thus rendering it
|
||||||
// not reusable, to use the same prototype for multiple objects
|
// not reusable, to use the same prototype for multiple objects
|
||||||
// clone it via. Object.create(..) or copy it...
|
// clone it via. Object.create(..) or copy it...
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user