flankerLe 01/05/2017 à 10:54
- bibliothèque standard vide (ce n'est pas pour rien que jQuery a eu tant de succès)
- comportement totalement imprévisible sauf si on connaît par cœur toutes les spécificités de JS
- les erreurs silencieuses : on peut faire des énormités en JS sans même s'en rendre compte (suffit de voir la plupart des WTF JS : objectivement ce sont des erreurs du programmeur, mais le JS aurait dû lever une exception au lieu d'essayer de trouver une valeur sensée)
- un modèle de programmation qui pousse à faire des lambdas dans des lambdas dans des lambdas dans des lambdas dans des lambdas (ce qui donne un code totalement illisible et impossible à tester)
- leur table de hash est… pourrie ? on ne peut même pas avoir le nombre d'éléments sans tout recompter \o/ ah oui, c'est vrai que la table de hash n'existe pas vraiment, c'est simplement l'objet de base.
En reprenant un exemple de Mozilla :
var Personne = function() {
this.peutParler = true;
this.salutation = function() {
if (this.peutParler) {
console.log('Bonjour, je suis ' + this.nom);
}
};
};
var Employe = function(nom, titre) {
this.nom = nom;
this.titre = titre;
this.salutation = function() {
if (this.peutParler) {
console.log("Bonjour, je suis " + this.nom + ", le " + this.titre);
}
};
};
Employe.prototype = new Personne();
var Client = function(nom) {
this.nom = nom;
};
Client.prototype = new Personne();
var bob = new Employe('Bob', 'bricoleur');
var joe = new Client('Joe');
var rg = new Employe('Red Green', 'réparateur');
var mike = new Client('Mike');
bob.salutation();
// Bonjour, je suis Bob, le bricoleur
Aucune différence visible entre une fonction qui ne renvoie rien et un constructeur. Super pour la lisibilité ^^
Honnêtement, quel est l'avantage (surtout en termes de lisibilité) par rapport à un modèle classique, du genre
class Personne:
blabla
class Employe(Personne):
blabla