2009-12-09 23 views
7

funciones Javascript se pueden declarar en un prototipo objetos de esta manera:¿En qué se diferencian las funciones de prototipo de las funciones normales en javascript?

<object name>.prototype.<variable name>=function(){ 
// 
// 
} 

Cómo difiere esto de siguiente declaración?

<object name>.<variable name>=function(){ 
// 
// 
} 

¿En qué se diferencian las funciones de prototipo de las funciones normales en javascript?

+1

favor, vuelva a la frase en una pregunta real que pueden ser contestadas. – gahooa

+3

@gahooa: ¿Por qué piensa esta pregunta no puede ser contestada. Puede ser de muy alto nivel, pero sigue siendo una pregunta. Siempre puede editarlo para hacerlo más claro. No hay necesidad de votar en contra de esto simplemente debido a los errores gramaticales ... – Josh

+0

http://stackoverflow.com/questions/186244/what-does-it-mean-that-javascript-is-a-prototype-based-language –

Respuesta

7

funciones declaradas en el prototipo de un objeto de base son heredados por todas las instancias de ese tipo de objeto.

Por ejemplo ..

String.prototype.foo = function() { 
    return 'bar'; 
}; 

Ahora, cada cadena tendrá la función foo() disponibles.

'test'.foo(); // returns 'bar'

Leer más sobre here

+2

1 Además, merece la pena señalar explícitamente que las funciones * * y propiedades declaradas en el prototipo de un objeto son heredados por todas las instancias del objeto que, * incluso aquellos que ya han sido instanciado. * –

+0

Sí, buen punto. Esa última parte es muy importante. El prototipo actúa como la última captura antes de que un miembro se considere "indefinido" ... por lo que la modificación del prototipo también afecta a los objetos existentes. – Matt

16

funciones del prototipo basado en la herencia de prototipo son funciones de instancia, mientras que las funciones normales son funciones "estáticos". Las funciones declaradas en el prototipo de la clase estarán disponibles en todas las instancias de esa clase.

var MyClass = function(){ 
}; 
MyClass.staticFunction = function(){alert("static");}; 
MyClass.prototype.protoFunction = function(){alert("instance");}; 

MyClass.staticFunction(); //OK 
MyClass.protoFunction(); //not OK 

var myInstance = new MyClass(); 
myInstance.staticFunction(); //not OK 
myInstance.protoFunction(); //OK 
+2

+1 Esta es la explicación más concisa que he visto. –

0

Matt e Igor ya han proporcionado suficientes ejemplos de código, pero uno de los mejores artículos (corto, corregir y el punto) que se pueden leer es Prototypal Inheritance, por Douglas Crockford.

También hay un montón de diferentes maneras de facilitar la herencia a través de las bibliotecas populares (Dojo, Prototype, etc.)

Cuestiones relacionadas