Si vous venez d'un langage orienté objet basé sur les classes et à typage statique (comme Java, C++ ou C#) Je suppose que vous essayez de créer une variable ou une méthode associée à un "type" mais pas à une instance.
Un exemple utilisant une approche "classique", avec des fonctions de construction, pourrait peut-être vous aider à comprendre les concepts de base de l'OO JavaScript :
function MyClass () { // constructor function
var privateVariable = "foo"; // Private variable
this.publicVariable = "bar"; // Public variable
this.privilegedMethod = function () { // Public Method
alert(privateVariable);
};
}
// Instance method will be available to all instances but only load once in memory
MyClass.prototype.publicMethod = function () {
alert(this.publicVariable);
};
// Static variable shared by all instances
MyClass.staticProperty = "baz";
var myInstance = new MyClass();
staticProperty
est défini dans l'objet MyClass (qui est une fonction) et n'a rien à voir avec ses instances créées, JavaScript traite les fonctions comme des objets de première classe En tant qu'objet, vous pouvez donc attribuer des propriétés à une fonction.
UPDATE : ES6 a introduit la possibilité de déclarer des classes par le biais de la class
mot-clé. Il s'agit d'un sucre syntaxique par rapport à l'héritage existant basé sur les prototypes.
En static
mot-clé vous permet de définir facilement des propriétés ou des méthodes statiques dans une classe.
Voyons l'exemple ci-dessus mis en œuvre avec des classes ES6 :
class MyClass {
// class constructor, equivalent to
// the function body of a constructor
constructor() {
const privateVariable = 'private value'; // Private variable at the constructor scope
this.publicVariable = 'public value'; // Public property
this.privilegedMethod = function() {
// Public Method with access to the constructor scope variables
console.log(privateVariable);
};
}
// Prototype methods:
publicMethod() {
console.log(this.publicVariable);
}
// Static properties shared by all instances
static staticProperty = 'static value';
static staticMethod() {
console.log(this.staticProperty);
}
}
// We can add properties to the class prototype
MyClass.prototype.additionalMethod = function() {
console.log(this.publicVariable);
};
var myInstance = new MyClass();
myInstance.publicMethod(); // "public value"
myInstance.additionalMethod(); // "public value"
myInstance.privilegedMethod(); // "private value"
MyClass.staticMethod(); // "static value"
0 votes
Nous pouvons définir une étiquette ou une autre balise html avec l'attribut de style "dispaly:none" et définir une valeur variable pour cette valeur et effectuer des opérations sur cette valeur. Ne prenons pas de risques.
0 votes
La solution la plus simple que j'ai trouvée est de ne pas définir de variable statique dans la classe. Lorsque vous voulez utiliser une variable statique, définissez-la simplement à ce moment-là, par exemple
someFunc = () => { MyClass.myStaticVariable = 1; }
. Il suffit ensuite de créer une méthode statique pour renvoyer le membre statique, par exemplestatic getStatic() { return MyClass.myStaticVariable; }
. Il vous suffit alors d'appelerMyClass.getStatic()
de l'extérieur de la classe pour s'emparer des données statiques !0 votes
VOIR LA MISE À JOUR 2021 POUR SAVOIR COMMENT UTILISER LES CHAMPS STATIQUES. ET LES MEMBRES DE CLASSE STATIQUES À PARTIR DE 4/2021. BEAUCOUP DE CHOSES ONT CHANGÉ !