0
votes

Y a-t-il un moyen de déterminer que ma méthode d'objet est une fonction ou non

J'ai une fonction qui itère via une gamme d'objets et renvoie un modèle de modèle qui saisit une valeur de propriété (nom) et une valeur de propriété qui est une méthode de fonction (c'est-à-dire. Move / Combien de marches ils vont prendre) La méthode .Move utilise Math.Random pour choisir un nombre aléatoire d'étapes et renvoyer cette valeur. Cependant, dans certains objets, la propriété de déplacement est définie comme un entier tel que 1 ou 2 au lieu d'un nombre aléatoire.

Y a-t-il un moyen de modifier mon FitnessTest de sorte qu'il accepte à la fois le .Move () et .move ?

J'ai essayé d'utiliser une déclaration si d'autre à l'intérieur de ma période de mon moment indique xxx

qui retourne les objets qui ont des valeurs .Move définies comme des entiers correctement mais ne reviennent pas Numéros aléatoires pour les objets qui ont .Move (). xxx

en ce moment, la fonction irarai via une gamme d'objets qui ont .Move () En tant que fonction qui génère un nombre aléatoire et renvoie la chaîne appropriée, mais les objets qui ont. Move définie comme un entier, cela me donnera simplement un

erreur type de arayobject [i] .Move n'est pas une fonction


2 commentaires

typeof ArrayObject == fonction doit être typeof arayobject [i] .Move == fonction


typeof ArrayObject vous donnera le type de arrayObject ... arayobject [i] .Move n'est pas le même type que arayobject < / code> évidemment


3 Réponses :


0
votes

1. typeof renvoie une valeur de chaîne, vous devez comparer contre une chaîne de types JavaScript.

2. Vous devez tester si la propriété Déplacer d'un seul élément de ArrayObject est une fonction, pas arayobject lui-même:

typeof arayobject [i] .move == 'fonction'


1 commentaires

Cela devrait être un commentaire. Veuillez patienter jusqu'à ce que vous ayez assez de privilège pour commenter



0
votes

vérifier typeof code> élément de tableau mais pas la variable de tableau. XXX PRE>

Modifiez votre code sur: P>

while (steps <= 20) {
  if (typeof arrayObject[i].move === "function") {
    steps += arrayObject[i].move();
    turns++;
  } else   if (typeof arrayObject[i].move === "number")
    steps += arrayObject[i].move;
    turns++


0 commentaires

0
votes

typeof code> vous donne une chaîne, vous devez donc l'assimiler avec une chaîne à l'aide de "" code>. Comparez également la propriété déplacer code> et non l'objet lui-même.

Vous pouvez utiliser l'opérateur ternaire pour votre objectif et peut avoir un code plus élégant. P>

while (steps <= 20) {
  steps += typeof arrayObject[i].move === "function" ? arrayObject[i].move() : arrayObject[i].move;
  turns++;
}


0 commentaires