Interface simulation for ES2015 (ES6) classes.
bower install interface
Import interface library.
import Interface from 'interface';
or
import {Interface} from 'interface';
Create our interface.
const Observable = Interface({
off(name, callback, context) {
// unbind listener
},
on(name, callback, context) {
// bind listener
},
once(name, callback, context) {
// bind listener once
},
trigger(name) {
// trigger listeners bound to a name
}
});
Use it!
class Model extends Observable() {
constructor() {
this.on('change', this.save, this);
}
fetch() {
// ajax request to fetch data
}
save(data) {
// ajax request to save data
this.trigger('change');
}
}
So if you want to extend a class with an interface:
const Renderable = Interface({
render() {
// render
}
})
class ViewModel extends Renderable(Model) {}
let myViewModel = new ViewModel();
myViewModel.render(); // it works
Note: If you need to use multiple interfaces as javascript inheritance is based on prototyping and mixins, you should keep in mind last element used around is overriding duplicated methods.
const Runnable = Interface({
run() {
console.log('runnable');
// do some stuff
}
});
const Threadable = Interface({
run() {
console.log('threadable');
// do some stuff
}
});
class Process extends Threadable(Runnable()) {}
let process = new Process();
process.run(); // threadable
class Program extends Runnable(Threadable()) {}
let program = new Program();
program.run(); // runnable
I hope this explain better ^^.