variable de classe en Javascript
Comment puis-je déclarer des variables de classe en Javascript.
function Person(){
fname = "thisfname"; //What needs to be put here
}
alert(Person.fname) //It should alert "thisFrame"
Je ne veux pas utiliser cette approche.
function Person(){
}
Person.fname = "thisfname";
alert(Person.fname) //alerts "thisframe"
Vous devez vous connecter pour publier un commentaire.
JavaScript n'ayant pas de classes, comme d'autres l'ont dit. L'héritage est résolu par le biais de prototypage qui par essence ne fait rien de plus que de créer non supprimables références de propriété sur un objet nouvellement créé. JavaScript a aussi des alternatives pour de simples objets de données, à savoir l'objet de littéraux.
La variation d'une "Classe" en JavaScript doit être définie en tant que telle:
La
this
de référence indique toujours le propriétaire de lafunction
. Si vous appelezPerson
sansnew
exploitant, le propriétaire sera la portée globale (fenêtre). Si vous n'utilisez pas cette référence à attribuer des propriétés à votre exemple, les propriétés seront tout simplement être déclarés comme des variables. Si vous n'utilisez pas levar
déclaration, ces déclarations vont créer des variables globales qui sont mauvais!plus sur ce
À l'aide de la
this
référence à une fonction constructeur est extrêmement important si vous souhaitez ajouter des propriétés à l'instance en cours. Sans l'aide dethis
, vous ne créez une variable (ce qui n'est pas le même que d'un bien) et comme mentionné, si vous n'utilisez pas l'instruction var soit, vous créer des variables globales.D'utiliser cette!
Remarque, rien attribuée à une instance par le biais de la fonction constructeur NE peut pas ÊTRE HÉRITÉE, à moins que vous l'affectez à le prototype et l'écraser à nouveau dans la fonction constructeur pour en faire une propriété.
Lorsque vous créez une nouvelle instance d'une fonction doublement en tant que constructeur, en fait, la suite se passe.
En fait, c'est ce qui se passe dans chaque langue classique lorsque vous créez une instance d'une classe. Mais la principale différence en JavaScript, c'est qu'il n'est pas encapsulé dans une belle déclaration de Classe. À l'origine, le JavaScript n'ai même pas de fonction des constructeurs, mais a été ajouté plus tard, parce que le SOLEIL a exigé qu'ils voulaient JavaScript pour être plus comme Java.
Objet littéraux
L'alternative pour fonction de constructeurs pour des objets qui portent seulement intrinsèque des données et pas de méthodes sont des littéraux d'objet.
Qui est le préféré façon de déclarer des objets intrinsèques plutôt:
Avec des littéraux d'objet dans l'ensemble de vos compétences, vous pouvez créer un modèle de fabrique pour les données intrinsèques des objets à l'aide de la motif de module (qui est en général pour les singletons).
Cela permet d'obtenir certains à l'aise d'encapsulation, mais ne peut être utilisé pour les données intrinsèques des objets.
Une autre chose que vous pouvez faire avec les Objets littéraux et JavaScript est la délégation, qui doit être privilégié.
Pourquoi faudrait-il privilégier? Parce qu'il garde vos objets minutes et lisible, même prototype de références de prendre de la mémoire et lors de l'utilisation de l'héritage et de "sous-classement' vous vous retrouvez avec les instances enfant qui a beaucoup de inutilisés méthode de référence. Délégation est toujours la meilleure.
class
.pseudo code
partie) est faux, ce qui est probablement la raison pour laquelle vous pensez que cette délégation permet d'économiser la mémoire. (Voir les sections 13.2.2 et 11.2.2 de ECMA-262)La façon dont vous l'avez mentionné, est de savoir comment définir les variables de classe, dans l'autre sens (à l'intérieur de
function Person
) est de définir les propriétés de l'occurrence.Person
n'est pas une classe, il n'y a pas quelque chose comme une classe en JavaScript. JavaScript a des objets avecprototypal inheritance
, maisPerson
est simplement un Objet dans ce cas, il n'a même pas a une méthode, c'est juste une HashMap/Dictionnaire ce que vous voulez l'appeler. Voir BGerissen la réponse ci-dessous quelques bonnes explications.Person
ci-dessus est une "fonction qui est utilisée pour instancier d'objet", si vous voulez être plus précis. Encore une fois, je crois que nous pouvons l'appeler une classe lors de la parler en général, vous pouvez continuer plus spécifiques pour toujours et à la fin de l'appelant ECMA Script Pointeur de la Mémoire d'un script pour être analysée(1) sur le fait d'être appelé via la parenthèse de la syntaxe. (1): Exécuté en cas de nouveaux compilateurs javascript.. De SORTE que le point est, la réponse ci-dessus n'est pas destiné à induire en erreur et la mauvaise utilisation de la terminologie, mais pour expliquer quelque chose d'une manière simple.Il est important de comprendre qu'il n'y a pas une telle chose comme des classes en JavaScript. Il y a quelques cadres qui simulent un classique de motif d'héritage, mais techniquement, cela revient à constructeur de fonctions et de prototypes.
Donc, vous voudrez peut-être faire quelque chose comme
Maintenant, connectez le constructeur pour le prototype:
Et, voilà:
Ne peux pas penser à un meilleur exemple.
function Person(fname, lname)
va remplacer la définition defunction Person()
, ce n'est pas la façon de faire de surcharge de fonctions en javascript.with
est considéré comme dangereux par Crockford et les autres, si la propriété dans lawith
caluse n'existe pas sur l'objet vous permettra de définir une variable globale à la place.with
dans des sociétés patriarcales javascript de la communauté.3 façons de définir des variables de classe JavaScript:
1)Pour définir les propriétés créées à l'aide de la fonction(), vous pouvez utiliser le 'ce' mot-clé
À instancier un objet de la Pomme de classe, de définir certaines propriétés, vous pouvez effectuer les opérations suivantes:
2) À L'Aide De La Notation Littérale
Dans ce cas, vous n'avez pas besoin (et ne peut) pas de créer une instance de la classe, elle existe déjà.
3) Singleton à l'aide d'une fonction
Donc, vous voyez que c'est très proche de 1 décrit ci-dessus, mais de la manière d'utiliser l'objet est exactement comme en 2.
Vous pouvez également essayer cette approche: