Méthodes statiques et variables en JavaScript ES5 (sans utiliser de « classe ») sans instantir des objets?


Je voulais reproduire plus ou moins une méthode variable ou statique de java

n’essayez pas de programmer dans une langue comme si c’était une autre, apprenez plutôt comment la nouvelle langue fonctionne et continue votre ligne. Pourquoi voulez-vous utiliser JavaScript pour ressembler à Java? Il suffit de ne pas le faire.

Le concept de propriété ou de méthode statique en Java signifie que cette propriété ou cette méthode ne dépend pas d’une instance, sinon, de la même classe. Que comprends-tu à ce sujet? Eh bien, c’est un peu complexe, dans Java, il y a les chargeuses de classe qui sont responsables de la chargement des classes et de l’inscription lorsque la JVM augmente. Si vous définissez une propriété ou une méthode statique, ceci est également chargé, cela ne se produit pas avec des variables et des méthodes d’instance, car votre signature est chargée uniquement.

<

En JavaScript, il n’existe pas dans les classes

En fait, pensant que ceci est faux puisque dans ES6, il est apparu class, mais cela ne fonctionne pas comme les nouvelles personnes pensent. Bien que vous croyiez « classes » avec class Vous créez des fonctions avec votre prototype respectif. Esto es solo sintaxis, no tiene impacto.

Sin embargo, puedes *emular variables y métodos estáticos** mediante Object.defineProperty:

function User () { }Object.defineProperty(User, 'age', { enumerable: true, configurable: true, writable: true, value: 23});Object.defineProperty(User, 'getInfo', { enumerable: true, configurable: true, writable: true, value: function () { return 'Hola, tengo ' + User.age + ' años'; }});console.log(User.getInfo());

Como puedes ver, ahora age y getInfo están adheridas a la función User.

Sería lo más parecido a Java, ¿ vérité? Je n’ai pas besoin de créer une instance et la méthode ne serait pas inhalée, non?

Ce que vous faites est appelé fonction d’usine et est assez utilisé pour créer Les objets ont des propriétés privées et d’utiliser l’agrégation au lieu d’héritage. Mais en réalité, il n’y a pas beaucoup de différence, la différence est celle d’une fonction de constructeur (new) Ajouter un contexte (this) à L’instance, en dehors de cela, les deux créent des objets.

« 5d1348b707″>

une partie Si j’étais intéressé par le fait qu’une méthode ou une variable ne pouvait pas être écrasée, sans affecter d’autres variables et méthodes, utilisées pour utiliser Object.defineProperty pour faire des variables et des méthodes statiques qui n’ont pas pu être surchargées sans avoir à utiliser Object.freeze, Object.seal ou ?

L’avantage de Object.defineProperty est qu’il vous donne plus de flexibilité: vous pouvez le faire en lecture seule, pas Rendez-le enumérable, etc. D’autre part, Object.freeze vous empêche d’ajouter de nouvelles propriétés à un objet, de supprimer ou de modifier les personnes existantes. C’est comme si vous mettez un cadenas; Utile dans les cas où vous ne voulez pas modifier un objet, par exemple, pour la sécurité, etc.

la méthode Object.seal fait quelque chose de similaire: vous empêcher d’ajouter nouvelles propriétés et que vous modifiez la configuration des celles existantes, mais les propriétés peuvent être modifiées.

La méthode Object.preventExtensions empêche les propriétés nouvelles, mais peut être ajouté des propriétés directement dans votre prototype.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *