Minimalist mixin helper designed to be used with ES6 (ES2015) classes.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
specs
src/lib
.babelrc
.codeclimate.yml
.editorconfig
.eslintignore
.eslintrc
.gitignore
.istanbul.yml
.npmignore
.travis.yml
CONTRIBUTING.md
LICENSE.md
README.md
esdoc.json
package.json

README.md

es6-mixin

Minimalist mixin helper designed to be used with ES6 (ES2015) classes. Less than 1 kB minified and gzipped.

Latest Stable Version License Build Status

Dependency Status NPM Downloads Test Coverage API Documentation Code Climate

Installation

npm install --save es6-mixin

Usage

mix(SuperClass, Mixin1, Mixin2, ...)

import { mix } from 'es6-mixin';

class Super {
  foo() {
    return 'foo';
  }
}

class Mixin1 {
  bar () {
    return 'bar';
  }
}

class Mixin2 {
  baz () {
    return 'baz';
  }
}

class Sub extends mix(Super, Mixin1, Mixin2) {
}

new Sub().foo(); // => 'foo'
new Sub().bar(); // => 'bar'
new Sub().baz(); // => 'baz'
new Sub() instanceof Super; // => true
new Sub() instanceof Mixin1; // => false
new Sub() instanceof Mixin2; // => false

mixin(target, Mixin [, arg1, arg2, ...])

Basic usage

import { mixin } from 'es6-mixin';

class Foo {
  foo() {
    return 'foo';
  }
}

class Bar {
  constructor() {
    mixin(this, Foo);
  }
}

new Bar().foo(); // => 'foo'

Pass parameters to a constructor

import { mixin } from 'es6-mixin';

class Foo {
  constructor(a, b, c) { ... }

  foo() {
    return 'foo';
  }
}

class Bar {
  constructor() {
    mixin(this, Foo, 1, 2, 3); // 1, 2, 3 are passed to Foo's constructor
  }
}

new Bar().foo(); // => 'foo'

Use with ES5-style prototypes

import { mixin } from 'es6-mixin';

function Foo() {
}

Foo.prototype.foo = function() {
  return 'foo';
};

class Bar {
  constructor() {
    mixin(this, Foo);
  }
}

new Bar().foo(); // => 'foo'

class extends Mixin { ... }

import { Mixin } from 'es6-mixin';

class Foo extends Mixin {
  foo() {
    return 'foo';
  }
}

class Bar {
  constructor() {
    Foo.mixin(this);
  }
}

new Bar().foo(); // => 'foo'