ES6 - les classes

Une petite remarque sur les nouveaux objets « class » qui nous attendent avec ES6 et ce que je fais actuellement avec ma librairie rnb-js.

class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    toString() {
        return '(' + this.x + ', ' + this.y + ')';
    }
}

class ColorPoint extends Point {
    constructor(x, y, color) {
        super(x, y);
        this.color = color;
    }
    toString() {
        return super.toString() + ' in ' + this.color;
    }
}
Définition d'une classe Point et d'une classe ColorPoint en ES 6.

Aujourd'hui, pour obtenir la même chose (au niveau de l'APIs des objets manipulés, pas en ce qui concerne les objets eux-mêmes), j'utilise une méthode create du module lang de ma librairie.

var Point = lang.create(null, {
    constructor: function (x, y) {
        this.x = x;
        this.y = y;
    },
    toString: function () {
        return '(' + this.x + ', ' + this.y + ')';
    }
});

var ColorPoint = lang.create([Point], {
    constructor: function (x, y, color) {
        Point.call(this, x, y);
        this.color = color;
    },
    toString: function () {
        return Point.prototype.toString.call(this) + + ' in ' + this.color;
    }
});
Création d'objets équivalent en ES 5 avec la librairie rnb-js.

La notation n'est pas beaucoup plus verbeuse mais elle nécessite évidemment l'utilisation d'une librairie possédant une API pour simuler l'héritage. A noter que je gère ici plutôt des mixins ou des traits que de l'héritage simple. Autre différence : la déclaration de membres statiques ne peut se faire qu'à posteriori.