HAKUROU L'amour est dans le code

Piou-class: Les classes en javascript sans se prendre la tête

Piou-class: Les classes en javascript sans se prendre la tête<br>

Javascript est un langage entièrement objet, cependant il y a diverse façons d'écrires ses propres objets, ce qui peut mener à une grande confusion.

Je m'efforce à toujours pondre mon code en objet quand ce paradigme est disponible dans le langage utilisé.

En Javascript, ça n'a pas forcément été évident, j'ai manipulé des closures, des fonctions dans des fonctions, les objets dit "à notation json", les prototypes, c'est sur ce dernier que j'ai trouvé le plus de flexibilité et ce côté plus "propre".
L'écriture d'un objet via le prototypage n'est pas compliqué mais visuellement c'est moche, on a quand même l'impression de faire du code crade malgré tout et puis il manque cruellement la possibilité de faire un héritage sans devoir passer par une fonction "magique" qui boucle sur tous les attributes pour les cloner.


C'est donc dans l'optique de faciliter l'écriture de classe que j'ai voulu créer piou-class.js, qui avec une écriture assez simple permet de faire ce qu'on attend d'un objet.

Voici quelques exemples:

// Déclaration d'une classe "User"
var User = piou.defClass({

});

 

On peut y ajouter un constructeur, attributs de classes et méthodes:

var User = piou.defClass({
	name: "",

	__construct: function(name)
	{
		this.name = name;
	},
	
	sayHello: function()
	{
		alert("Hello from " + this.name);
	}
});

 

On peut faire de l'héritage simplement:

var User = piou.defClass({
	// Contenu de la classe
});

// Un chevalier héritant de la classe "User"
var Knight = piou.defClass({
	extend$: User
});

 

On peut du coup facilement surcharger une méthode:

var User = piou.defClass({
	// Contenu de la classe
	sayHello: function()
	{
		alert("hello");
	}
});

// Un chevalier héritant de la classe "User"
var Knight = piou.defClass({
	extend$: User,
	
	sayHello: function()
	{
		alert("Hors de mon chemin, vil gueux !");
	}
});

 

On peut appeler une méthode parente si le besoin s'en fait sentir:

// Un chevalier héritant de la classe "User"
var Knight = piou.defClass({
	extend$: User,
	
	sayHello: function()
	{
		this.__parent("sayHello");
		alert("Hors de mon chemin, vil gueux !");
	}
});

 

Ajout de méthodes et attributs statiques:

var Export = piou.defClass({
	
	"static": {
		JSON: 1,
		XML: 2,
		
		function getVersion()
		{
			return "1.0.0";
		}
	}
});

 

Pour tester la bibliothèque, vous pouvez la télécharger sur Github https://github.com/hakurou/piou-class