0
votes

Incréments changeant chaque fonction fonctionne comme variable

J'ai trouvé la solution simple ici en utilisant < code> fermeture de @ xotic750

mais, est-il possible d'exécuter la fonction sans rond Supports? par exemple : xxx

chaque exécution de fonction J'ai la fonction comme [ Objet d'objet] dans console.log au lieu de valeur : xxx


5 commentaires

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 () .


@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 qui renvoie un objet.


@Markmeyer bien même lorsque incrément () est appelé constructeur L'objet explicitement renvoyé sera toujours la valeur de résultat. Si l'OP a pris nouveau , 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 .


Je comprends que @pointy - mais la façon dont il est utilisé ici, la valeur de retour résultera de l'appelant nouveau 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 () piratage mentionné dans une réponse.


3 Réponses :


1
votes

Vous créez un objet de la fonction incrément à l'aide du mot clé neuf . Dans votre cas, vous voudrez simplement appeler la fonction incrément comme suit: xxx

Voir ce lien sur fermetures pour une explication plus détaillée sur la façon dont ils fonctionnent.


2 commentaires

Je pense que l'OP veut que la variable incrément 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 ;



1
votes

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)

0 commentaires

2
votes

Comme vous imprimez les instances code> Incrément code>, il existe un Tostring code> conversion de la conversion. Vous pouvez l'utiliser pour effectuer l'incrément:

p>

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


3 commentaires

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!