2020-07-02 16:00:40 +03:00
|
|
|
# object-run.js
|
|
|
|
|
|
2020-07-02 18:31:41 +03:00
|
|
|
_object-run.js_ implements the tools needed to use the [Concatinative
|
2020-07-02 18:29:25 +03:00
|
|
|
Programming Style](https://en.wikipedia.org/wiki/Concatenative_programming_language)
|
|
|
|
|
on native JavaScript structures/objects.
|
2020-07-02 16:00:40 +03:00
|
|
|
|
2020-07-02 18:29:25 +03:00
|
|
|
This module defines a singe method `.run(..)` on `Object.prototype` making
|
|
|
|
|
it visible from all JavaScript objects inheriting from `Object`.
|
2020-07-02 16:00:40 +03:00
|
|
|
|
2020-07-02 18:29:25 +03:00
|
|
|
The `.run(..)` method simply executes a function in the context of the
|
|
|
|
|
object from which `.run(..)` was called. The return value of `.run(..)`
|
|
|
|
|
is the non-`undefined` return value of the passed function or the context
|
|
|
|
|
object otherwise.
|
2020-07-02 16:00:40 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
$ npm install --save object-run
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Basic usage
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
require('object-run')
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
var o = {}
|
|
|
|
|
.run(function(){
|
|
|
|
|
this.x = 123
|
|
|
|
|
this.y = 321
|
|
|
|
|
})
|
|
|
|
|
```
|
|
|
|
|
|
2021-03-19 10:54:05 +03:00
|
|
|
Conditionaly run a function...
|
|
|
|
|
```javascript
|
|
|
|
|
var o = {}
|
|
|
|
|
.run(o.x % 2 == 0,
|
|
|
|
|
function(){
|
|
|
|
|
this.x_is_odd = true
|
|
|
|
|
})
|
|
|
|
|
```
|
|
|
|
|
|
2020-07-02 18:20:49 +03:00
|
|
|
## Examples
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
var l = [1, 2, 3, 4, 5]
|
|
|
|
|
// keep only even elements...
|
|
|
|
|
.filter(function(e){
|
|
|
|
|
return e % 2 == 0 })
|
|
|
|
|
.sort()
|
|
|
|
|
// if length is not even add an extra even number at the end...
|
|
|
|
|
.run(function(){
|
|
|
|
|
this.length % 2 != 0
|
|
|
|
|
&& this.push(this[this.length-1] + 2) })
|
|
|
|
|
```
|
|
|
|
|
|
2020-07-02 16:00:40 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
## Components
|
|
|
|
|
|
|
|
|
|
### `Object.prototype.run(..)`
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
<obj>.run(<func>)
|
|
|
|
|
-> <obj>
|
|
|
|
|
-> <return-value>
|
2021-03-19 10:54:05 +03:00
|
|
|
|
|
|
|
|
<obj>.run(<cond>, <func>)
|
|
|
|
|
-> <obj>
|
|
|
|
|
-> <return-value>
|
2020-07-02 16:00:40 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
<func>()
|
|
|
|
|
-> undefined
|
|
|
|
|
-> <return-value>
|
|
|
|
|
```
|
|
|
|
|
|
2020-07-02 18:29:25 +03:00
|
|
|
If `<func>()` returns `undefined` then `.run(..)` will return `<obj>`.
|
|
|
|
|
|
|
|
|
|
|
2020-07-02 16:00:40 +03:00
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
[BSD 3-Clause License](./LICENSE)
|
|
|
|
|
|
|
|
|
|
Copyright (c) 2016-2020, Alex A. Naanou,
|
|
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- vim:set ts=4 sw=4 spell : -->
|