2009-12-09 4 views
7

fonctions Javascript peuvent être déclarées sur un prototype comme celui-ci des objets:En quoi les fonctions prototypes sont-elles différentes des fonctions normales en javascript?

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

Comment ça ce différent de déclaration suivante?

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

En quoi les fonctions prototypes sont-elles différentes des fonctions normales en javascript?

+1

S'il vous plaît reformuler dans une vraie question qui peut répondre. – gahooa

+3

@gahooa: Pourquoi pensez-vous que cette question ne peut pas être répondue. Ce pourrait être très haut niveau, mais c'est toujours une question. Vous pouvez toujours l'éditer pour le rendre plus clair. Pas besoin de voter en bas simplement à cause d'erreurs grammaticales ... – Josh

+0

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

Répondre

7

Les fonctions déclarées sur le prototype d'un objet de base sont héritées par toutes les instances de ce type d'objet.

Par exemple ..

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

Maintenant, chaque chaîne aura la fonction foo() disponible.

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

En savoir plus sur l'héritage basé sur un prototype here

+2

+1 En outre, il vaut la peine d'indiquer explicitement que les fonctions * et les propriétés * déclarées sur le prototype d'un objet sont héritées par toutes les instances de cet objet, * même celles qui ont déjà été instanciées. * –

+0

Oui, bon point. Cette dernière partie est très importante. Le prototype agit en quelque sorte comme la dernière capture avant qu'un membre ne soit considéré comme «non défini». La modification du prototype affecte également les objets existants. – Matt

16

fonctions prototypes sont des fonctions d'instance, alors que les fonctions normales sont des fonctions "statiques". Les fonctions déclarées sur le prototype de la classe seront disponibles sur toutes les instances de cette classe.

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 C'est l'explication la plus concise que j'ai vue. –

0

Matt et Igor ont déjà fourni des exemples de code assez, mais l'un des meilleurs articles (bref, corriger et au point) que vous pouvez lire est Prototypal Inheritance, par Douglas Crockford.

Il y a aussi beaucoup de façons différentes pour faciliter l'héritage par les bibliothèques populaires (Dojo, Prototype, etc.)

Questions connexes