«SyntaxError: неожиданный идентификатор» в классе javascript

У меня есть две функции в моем классе javascript, где одна функция вызывается в другой функции, я использую параметр, как я использую на другом языке программирования. Но меня бросает

"SyntaxError: Unexpected identifier"

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');

Обычно вы хотите оставить исходный код, чтобы мы могли понять природу вопроса, когда кто-то прочитает его в будущем.

ChaosPandion 08.04.2019 19:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
3 484
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно определить методы в классе. Вы также можете определить их как статические, поскольку они действительно не зависят ни от какого состояния экземпляра.

class IpSubnetMatch {
    ip2longConvert(ip) {
        // ...
    }
    inSubNet(ip,subnet) {
        const long_ip = this.ip2longConvert(ip);
        // ...
    }
}

@cyborg - я обновил, чтобы включить доступ к другим методам класса.

ChaosPandion 08.04.2019 19:37

Нет, столкнулся с той же проблемой. Я обновил вопрос с вашим предложением, но получил следующую ошибку «Ошибка типа: невозможно прочитать свойство« inSubNet »неопределенного

cyborg 08.04.2019 20:00

@cyborg - Странно, я запустил код, который вы только что вернули, и он работает. jsfiddle.net/64xz2kmg

ChaosPandion 08.04.2019 20:01

@cyborg - я вижу true в консоли и нет TypeError.

ChaosPandion 08.04.2019 20:04

Без консоли, как я должен получить вывод как истинный?

cyborg 08.04.2019 20:05

Ключевое слово function — проблема. Начиная с ECMA2015 вы должны использовать стрелочные функции.

Классы в JavaScript на самом деле не предлагают дополнительных функций и часто описываются как предоставляющие «синтаксический сахар» по сравнению с прототипами и наследованием. Классы ES6 предлагают более чистый и элегантный синтаксис.

class IpSubnetMatch {
    constructor() {

    }

    ip2longConvert(ip) {

    }

    inSubNet(ip,subnet) {
       //Call methods using this keyword.
       this.ip2longConvert(ip);   
    }
}

Методы класса не используют ключевое слово функция в синтаксисе класса. Используйте ключевое слово это для ссылки на методы или свойства.

Другие вопросы по теме