Quelle est la différence entre les deux déclarations suivantes ?
Est-ce OK de penser à la première instruction comme une déclaration d’une méthode statique et la seconde déclaration comme une déclaration d’une méthode d’instance ?
Quelle est la différence entre les deux déclarations suivantes ?
Est-ce OK de penser à la première instruction comme une déclaration d’une méthode statique et la seconde déclaration comme une déclaration d’une méthode d’instance ?
Oui, la première fonction n'a pas de relation avec un objet instance de la fonction constructeur, vous pouvez le considérer comme une 'méthode statique'.
Dans les fonctions JavaScript sont de première classe des objets, cela signifie que vous pouvez les traiter comme n'importe quel objet, dans ce cas, vous êtes seulement l'ajout d'une propriété à la fonction d'objet.
La deuxième fonction, comme vous étendez le constructeur de prototype de fonction, il sera disponible à toutes les instances de l'objet créé avec l' new
mot-clé, et le contexte à l'intérieur de cette fonction ( this
mot-clé) reportez-vous à la réelle instance de l'objet d'où vous appeler.
Considérons cet exemple:
// constructor function
function MyClass () {
var privateVariable; // private member only available within the constructor fn
this.privilegedMethod = function () { // it can access private members
//..
};
}
// A 'static method', it's just like a normal function
// it has no relation with any 'MyClass' object instance
MyClass.staticMethod = function () {};
MyClass.prototype.publicMethod = function () {
// the 'this' keyword refers to the object instance
// you can access only 'privileged' and 'public' members
};
var myObj = new MyClass(); // new object instance
myObj.publicMethod();
MyClass.staticMethod();
Lorsque vous créez plusieurs instances de MyClass, vous aurez toujours qu’une seule instance de publicMethod en mémoire, mais dans le cas de privilegedMethod, que vous finirez par la création de lots d’instances et de staticMethod n’a aucune relation avec une instance d’objet.
C’est pourquoi prototypes économiser de la mémoire.
En outre, si vous modifiez les propriétés de l’objet parent, est la propriété correspondante de l’enfant n’a pas été changée, il va être mis à jour.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.