Définir des méthodes via un prototype ou utiliser ceci dans le constructeur - vraiment une différence de performance?

En JavaScript, nous avons deux façons de faire une "classe" et de lui donner des fonctions publiques.

Méthode 1:

function MyClass() {
    var privateInstanceVariable = 'foo';
    this.myFunc = function() { alert(privateInstanceVariable ); }
}

Méthode 2:

function MyClass() { }

MyClass.prototype.myFunc = function() { 
    alert("I can't use private instance variables. :("); 
}

J'ai lu de nombreuses fois, les gens en disant: que l'aide de la Méthode 2 est plus efficace que toutes les instances partagent la même copie de la fonction plutôt que de l'obtention de leur propre. La définition de fonctions via le prototype a un énorme inconvénient cependant, il est impossible d'avoir privé les variables d'instance.

Même si, en théorie, à l'aide de la Méthode 1 donne à chaque instance d'un objet de sa propre copie de la fonction (et donc utilise de manière de plus de mémoire, pour ne pas mentionner le temps nécessaire pour les allocations) - est-ce que ce qui se passe réellement dans la pratique? Il semble comme une optimisation des navigateurs web pourrait facilement faire est de reconnaître que ceci est extrêmement commun, et ont en fait toutes les instances de l'objet de référence la même copie de fonctions définies par l'intermédiaire de ces "fonctions constructeur". Ensuite, il ne pourrait que donner un exemple de sa propre copie de la fonction si elle est explicitement modifié par la suite.

Toute réflexion - ou, mieux encore, expérience du monde réel - sur les différences de performances entre les deux, serait extrêmement utile.

source d'informationauteur MgSam