Pour les apprenants visuels, lors de la définition de la fonction sans .prototype
ExampleClass = function(){};
ExampleClass.method = function(customString){
console.log((customString !== undefined)?
customString :
"called from func def.");}
ExampleClass.method(); // >> output: `called from func def.`
var someInstance = new ExampleClass();
someInstance.method('Called from instance');
// >> error! `someInstance.method is not a function`
Avec le code même si .prototype
est ajouté,
ExampleClass.prototype.method = function(customString){
console.log((customString !== undefined)?
customString :
"called from func def.");}
ExampleClass.method();
// > error! `ExampleClass.method is not a function.`
var someInstance = new ExampleClass();
someInstance.method('Called from instance');
// > output: `Called from instance`
Pour faire i t plus claire,
ExampleClass = function(){};
ExampleClass.directM = function(){} //M for method
ExampleClass.prototype.protoM = function(){}
var instanceOfExample = new ExampleClass();
ExampleClass.directM(); ✓ works
instanceOfExample.directM(); x Error!
ExampleClass.protoM(); x Error!
instanceOfExample.protoM(); ✓ works
**** pour noter l'exemple ci-dessus, someInstance.method() ne sera pas exécuté comme,
ExampleClass.method() provoque une erreur & exécution ne peut pas continuer.
Mais pour l'amour d'illustration & compréhension facile, je l'ai gardé cette séquence. ****
Les résultats générés par chrome developer console
& JS Bin
Cliquez sur le lien ci-dessus jsbin à l'étape dans le code.
bascule a commenté la section avec ctrl + /
Ceci a été pris de: http://code.google.com/intl/es/speed/articles/optimizing-javascript.html Il est aussi important de dire que Si nous créons de nombreuses instances de 'MyClass', nous créons pour chaque instance une fonction' privilegedMethod'. Cependant 'publicMethod' est seulement construit une fois pour toutes les instances créées. – Menda
Voici un lien mis à jour vers l'article mentionné dans le commentaire de Menda: https://developers.google.com/speed/articles/optimizing-javascript –
Mais pourquoi Function.prototype.method == Function.method? – Raghavendra