para los estudiantes visuales, en la definición de la función sin .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`
Con mismo código, si se añade .prototype
,
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`
Para hacer i t más clara,
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
**** Nota para el ejemplo anterior, someInstance.method() no se ejecutará como,
ExampleClass.method() hace que la ejecución error & no puede continuar.
Pero en aras de la ilustración & fácil comprensión, he mantenido esta secuencia. ****
resultados son generados de chrome developer console
& JS Bin
Haga clic en el enlace de arriba para jsbin recorrer el código.sección
Toggle comentó con ctrl + /
Esto fue tomado de: http://code.google.com/intl/es/speed/articles/optimizing-javascript.html También es importante decir que si estamos creando muchas instancias de 'MyClass', estamos creando para cada instancia una función' privilegedMethod'. Sin embargo, 'publicMethod' solo se construye una vez para todas las instancias creadas. – Menda
Aquí hay un enlace actualizado al artículo mencionado en el comentario de Menda: https://developers.google.com/speed/articles/optimizing-javascript –
¿Pero por qué es Function.prototype.method == Function.method? – Raghavendra