https://github.com/howprogrammingworks/mixin
Mixin behavior, structure and relations
https://github.com/howprogrammingworks/mixin
javascript js mix mixin node nodejs object-assign
Last synced: 5 months ago
JSON representation
Mixin behavior, structure and relations
- Host: GitHub
- URL: https://github.com/howprogrammingworks/mixin
- Owner: HowProgrammingWorks
- License: mit
- Created: 2016-09-21T23:43:58.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2023-11-06T17:00:25.000Z (almost 2 years ago)
- Last Synced: 2023-11-07T01:03:27.848Z (almost 2 years ago)
- Topics: javascript, js, mix, mixin, node, nodejs, object-assign
- Language: JavaScript
- Homepage: https://www.youtube.com/TimurShemsedinov
- Size: 27.3 KB
- Stars: 7
- Watchers: 18
- Forks: 21
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Примеси в JavaScript
[](https://www.youtube.com/watch?v=NZMrJ2adEyY)
Tasks:
- see examples
- implement `extend(obj, ...objects)` so keys from objects will be mixed into obj only if it doesn't contain those keys
- implement `wrap(obj, ...funcs)` so if obj contains func.name it should be wrapped
- implement mixin `logable()`
- implement universal `equilateral` mixin for for N sides (see `6-class.js`)
- implement `emitable` with `Object.defineProperty` (see `6-evants.js`)
- implement mixin for prototypes (not instances)
- implement `extend` for mixins with additional `override:Boolean` flag
```js
const mix2 = [
{
override: true,
toString() {
return `${this.name} - ${this.city} - ${this.born}`;
}
},
{
override: false,
age() {
const year = new Date().getFullYear();
const born = new Date(this.born).getFullYear();
return year - born;
}
}
];extend(obj1, mix1, mix2);
```