mirror of
https://github.com/flynx/object.js.git
synced 2025-10-29 18:40:08 +00:00
doc...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
c3f49c84a0
commit
79bb4f5564
36
README.md
36
README.md
@ -37,7 +37,7 @@ interchangeable with them.
|
|||||||
|
|
||||||
|
|
||||||
Here is a basic comparison:
|
Here is a basic comparison:
|
||||||
<table border="0">
|
<table border="0" width="100%">
|
||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
<td width="50%">
|
<td width="50%">
|
||||||
|
|
||||||
@ -107,9 +107,9 @@ class B extends A {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
- Syntax pretty but _misleading_;
|
- Syntax pretty but _misleading_;
|
||||||
calling a constructor a class is not correct,
|
calling a _constructor_ a class is not correct,
|
||||||
- `static` and instance definitions are not ordered,
|
- `static` and instance definitions are not separated,
|
||||||
- `.attr` is copied to every instance
|
- lots of details done non-transparently under the hood.
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -491,6 +491,17 @@ makeRawInstance(<context>, <constructor>, ..)
|
|||||||
-> <object>
|
-> <object>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`makeRawInstance(..)` will do the following:
|
||||||
|
- Create an instance object
|
||||||
|
- get result of `.__new__(..)` if defined, or
|
||||||
|
- if prototype is a function or `.__call__(..)` is defined, create a
|
||||||
|
wrapper function, or
|
||||||
|
- if constructor's `.__proto__` is a function (constructor) use it
|
||||||
|
to create an instance, or
|
||||||
|
- use {}.
|
||||||
|
- Link the object into the prototype chain
|
||||||
|
|
||||||
|
|
||||||
A shorthand to this is `Constructor.__rawinstance__(context, ..)`.
|
A shorthand to this is `Constructor.__rawinstance__(context, ..)`.
|
||||||
|
|
||||||
|
|
||||||
@ -504,6 +515,18 @@ Constructor(<name>, <constructor-mixin>, <prototype>)
|
|||||||
-> <constructor>
|
-> <constructor>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`Constructor(..)` essentially does the following:
|
||||||
|
- Creates a _constructor_ function,
|
||||||
|
- Sets constructor `.name` and `.toString(..)` for introspection,
|
||||||
|
- Creates `.__rawinstance__(..)` wrapper to `makeRawInstance(..)`
|
||||||
|
- Sets constructor `.__proto__`, `.prototype` and `.prototype.constructor`,
|
||||||
|
- Mixes in _constructor-mixin_ if given.
|
||||||
|
|
||||||
|
The resulting _constructor_ function when called will:
|
||||||
|
- call constructor's `.__rawinstance__(..)` if defined or `makeRawInstance(..)`
|
||||||
|
to create an instance,
|
||||||
|
- call instance's `.__init__(..)` if present.
|
||||||
|
|
||||||
|
|
||||||
Shorthand to `Constructor(..)`
|
Shorthand to `Constructor(..)`
|
||||||
```
|
```
|
||||||
@ -512,6 +535,11 @@ C(<name>, ..)
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
- All of the above are generic and will work on any JavaScript object,
|
||||||
|
e.g. `object.makeRawInstance(null, Array, 'a', 'b', 'c')` will happily
|
||||||
|
produce `['a', 'b', 'c']` and so on...
|
||||||
|
|
||||||
|
|
||||||
## Utilities
|
## Utilities
|
||||||
|
|
||||||
|
|||||||
@ -661,6 +661,7 @@ function Constructor(name, a, b, c){
|
|||||||
!!constructor_proto
|
!!constructor_proto
|
||||||
&& (_constructor.__proto__ = constructor_proto)
|
&& (_constructor.__proto__ = constructor_proto)
|
||||||
_constructor.prototype = proto
|
_constructor.prototype = proto
|
||||||
|
_constructor.prototype.constructor = _constructor
|
||||||
|
|
||||||
// NOTE: this is intentionally last, this enables the user to override
|
// NOTE: this is intentionally last, this enables the user to override
|
||||||
// any of the system methods...
|
// any of the system methods...
|
||||||
@ -670,9 +671,6 @@ function Constructor(name, a, b, c){
|
|||||||
_constructor,
|
_constructor,
|
||||||
constructor_mixin)
|
constructor_mixin)
|
||||||
|
|
||||||
// set constructor.prototype.constructor
|
|
||||||
_constructor.prototype.constructor = _constructor
|
|
||||||
|
|
||||||
return _constructor }
|
return _constructor }
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user