2833Fermer2835
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