J'ai deux fonctions dans ma classe javascript où une fonction est appelée dans une autre fonction, j'ai utilisé le paramètre comme j'utilise dans un autre langage de programmation. Mais ça me jette
"SyntaxError: Identifiant inattendu"
class IpSubnetMatch { function ip2longConvert(ip) { var components; if(components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) { var iplong = 0; var power = 1; for(var i=4; i>=1;i--) { iplong += power * parseInt(components[i]); power *= 256; } return iplong; } else return -1; } function inSubNet(ip,subnet) { var mask, base_ip; var long_ip = ip2longConvert(ip); if((mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip = ip2longConvert(mask[1])) >= 0)) { var freedom = Math.pow(2,32 - parseInt(mask[2])); return(long_ip > base_ip) && (long_ip < base_ip + freedom -1); } else return false; } } let user = new IpSubnetMatch(); user.inSubNet('10.1.5.5', '10.1.0.0/16');
3 Réponses :
Vous devez définir des méthodes dans la classe. Vous pouvez également les définir comme statiques car ils ne dépendent vraiment d'aucun état d'instance.
class IpSubnetMatch { ip2longConvert(ip) { // ... } inSubNet(ip,subnet) { const long_ip = this.ip2longConvert(ip); // ... } }
@cyborg - J'ai mis à jour pour inclure l'accès à d'autres méthodes de la classe.
Non, face au même problème. J'ai mis à jour la question avec votre suggestion mais j'obtiens l'erreur suivante "TypeError: Impossible de lire la propriété 'inSubNet' d'undefined
@cyborg - C'est étrange, j'ai exécuté le code que vous venez de revenir et cela fonctionne. jsfiddle.net/64xz2kmg
@cyborg - Je vois true
apparaître dans la console et aucun TypeError
.
Sans console, comment devrais-je obtenir la sortie aussi vraie?
Le mot-clé function
est le problème. Depuis ECMA2015, vous devez utiliser les fonctions fléchées.
Les classes en JavaScript n'offrent pas réellement de fonctionnalités supplémentaires et sont souvent décrites comme fournissant un «sucre syntaxique» par rapport aux prototypes et à l'héritage. Les classes ES6 offrent une syntaxe plus claire et plus élégante.
class IpSubnetMatch { constructor() { } ip2longConvert(ip) { } inSubNet(ip,subnet) { //Call methods using this keyword. this.ip2longConvert(ip); } }
Les méthodes de classe n'utilisent pas le mot-clé function dans la syntaxe de classe. Utilisez ce mot-clé pour référencer des méthodes ou des propriétés.
Normalement, vous voulez laisser le code d'origine afin que nous puissions comprendre la nature de la question lorsque quelqu'un la lira à l'avenir.