J'ai trouvé la solution simple ici en utilisant < code> fermeture code> de @ xotic750
chaque exécution de fonction J'ai la fonction em> comme [ Objet d'objet] code> dans
console.log code> au lieu de
valeur code>: p>
3 Réponses :
Vous créez un objet de la fonction Voir ce lien sur fermetures pour une explication plus détaillée sur la façon dont ils fonctionnent. P> p> incrément code> à l'aide du mot clé code> neuf code>. Dans votre cas, vous voudrez simplement appeler la fonction
incrément code> comme suit:
Je pense que l'OP veut que la variable code> incrément code> doit agir comme un code getter et exécuter chaque fois que sa valeur est interrogée.
@Ben Beck, merci. Oui, je sais que cela fonctionne, mais je dois l'obtenir de nouvelle variable, sans utiliser des crochets ronds b>;
est-il possible d'exécuter la fonction sans crochets ronds p>
Oui, vous pouvez le faire en utilisant un getter , voici un exemple: p>
p>
class Cls { constructor() { this.value = 0; } get increment() { return this.value++ } } const cls = new Cls() console.log('value: ' + cls.increment) console.log('value: ' + cls.increment) console.log('value: ' + cls.increment)
Comme vous imprimez les instances code> Incrément code>, il existe un p> Tostring code> conversion de la conversion. Vous pouvez l'utiliser pour effectuer l'incrément:
var Increment = (function(n) {
var f = function() {
this.n = 0;
};
f.prototype.toString = function() {
this.n += 1;
return this.n;
}
return f
}(0));
var increment = new Increment();
console.log('value: ' + increment) // value: 1
console.log('value: ' + increment) // value: 2
console.log('value: ' + increment) // value: 3
increment = new Increment();
console.log('value: ' + increment) // value: 1
console.log('value: ' + increment) // value: 2
console.log('value: ' + increment) // value: 3
C'est une bonne idée, bien que j'aurais une conversation sérieuse avec un développeur qui a fait cela dans mon codebase :)
Bien sûr, je suis ouvert pour même de parler avec l'OP :)
@Trincot merci beaucoup!
Pour appeler une fonction ordinaire, vous avez besoin d'une liste d'arguments entre parenthèses. Il ne peut y avoir aucun argument mais vous avez besoin du
() code>.
@Pointy qui n'aidera pas ici. Cet exemple est beaucoup plus compliqué qu'il n'a besoin d'être. L'incrément est une fonction, mais vous l'appelez avec
neuf code> qui renvoie un objet.
@Markmeyer bien même lorsque
incrément () code> est appelé constructeur L'objet explicitement renvoyé sera toujours la valeur de résultat. Si l'OP a pris
nouveau code>, il ne fonctionnerait toujours pas, mais le problème n'a rien à voir avec ça. Lorsqu'un constructeur renvoie explicitement un objet (que ce soit l'objet construit ou non), cela remplace l'effet de
nouveau code>.
Je comprends que @pointy - mais la façon dont il est utilisé ici, la valeur de retour résultera de l'appelant
nouveau code> sur la fonction intérieure car c'est ce qui est renvoyé par l'IEFE.
@Markmeyer oh oh, je vois ce que tu veux dire. Oui c'est un gâchis; Toutefois, pour la question réelle, la réponse est toujours «non» de getter (ne peut pas faire cela avec une variable simple) ou quelque chose comme le
.tostring () code> piratage mentionné dans une réponse.