which is a natural evolution of this project. It provides bare minimal functionality to deal with native classes without haveing ever any transpiler on its way.
A future proof, backward compatible, JavaScript class utility.extends
and constructor
plus other featuresFeel free to test all features related to this project, and please come back if your browser is not green.
npm install es-class
It is suggested to install this globally as it's a very small script.
Many thanks to cdnjs for hosting this script. Following an example on how to include it.
<script src="//cdnjs.cloudflare.com/ajax/libs/es-class/1.2.2/es-class.js" >/* ES-Class */</script>
Following a list of tested browsers split in Desktop and Mobile, plus a list of server/micro-controller side supported engines.
If you actually know a hybrid (like Espruino) or ES3+ engine that does not work, please file a bug, thank you!
All features explained in the dedicated page.
Following a summary:
1.3.0
This is an example of what's possible:
var Engineer = Class({ extends: Person, with: [ eventEmitter, growingEachYear, carrierPath ], implements: [ iWorker ], static: { SOFTWARE: 0, CONSTRUCTIONS: 1 }, constructor: function (name, age, type) { this.super(name, age); this.type = type; } }); var me = new Engineer( 'Mr. Andrea Giammarchi', 36, Engineer.SOFTWARE ); me instanceof Person; // true me.type; // Engineer.SOFTWARE me.emit('work:start', { tasks: ['do this', 'do that'] });
Using Babel it is possible to make your code directly compatible down to ES5 or even ES3 without loosing the ability to debug in every platform without needing source-map. What you see is basically what you get.
// how you would write in native ES6 class B extends A { method(x, y) { return super.method(x, y); } get value() { return super.value; } set value(value) { super.value = value; } } // how you would write in es-class var B = Class({ extends: A, method(x, y) { return this.super(x, y); }, get value() { return this.super(); }, set value(value) { return this.super(value); } });
A simple call to babel --whitelist=es6.arrowFunctions,es6.properties.shorthand f.js
and the output will be way cleaner than any automation produced by the same transpiler.
Your output will be more readable and also probably faster at execution time.
Looking at the future, grouped static properties and lightweight traits are also in, giving the ability to compose classes through eventual traits initialization without being on the way after class definition.
var wheels = { init: function () { if (this instanceof Car) { this.frontWheels = 2; this.rearWheels = 2; } else { this.frontWheels = 1; this.rearWheels = this instanceof Tricycle ? 2 : 1; } }, turn: function (where) { console.log('turning ' + where); } }; var engine = { hp: 120 }; var Car = Class({ with: [ wheels, engine ] }); var c = new Car; c.turn('left'); // trning left c.hp; // 80
You can also simply npm install -g es-class
and use var Class = require('es-class');
whenever you need it.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4