У меня есть две функции в моем классе 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');
Вам нужно определить методы в классе. Вы также можете определить их как статические, поскольку они действительно не зависят ни от какого состояния экземпляра.
class IpSubnetMatch {
ip2longConvert(ip) {
// ...
}
inSubNet(ip,subnet) {
const long_ip = this.ip2longConvert(ip);
// ...
}
}
@cyborg - я обновил, чтобы включить доступ к другим методам класса.
Нет, столкнулся с той же проблемой. Я обновил вопрос с вашим предложением, но получил следующую ошибку «Ошибка типа: невозможно прочитать свойство« inSubNet »неопределенного
@cyborg - Странно, я запустил код, который вы только что вернули, и он работает. jsfiddle.net/64xz2kmg
@cyborg - я вижу true
в консоли и нет TypeError
.
Без консоли, как я должен получить вывод как истинный?
Ключевое слово function
— проблема. Начиная с ECMA2015 вы должны использовать стрелочные функции.
Классы в JavaScript на самом деле не предлагают дополнительных функций и часто описываются как предоставляющие «синтаксический сахар» по сравнению с прототипами и наследованием. Классы ES6 предлагают более чистый и элегантный синтаксис.
class IpSubnetMatch {
constructor() {
}
ip2longConvert(ip) {
}
inSubNet(ip,subnet) {
//Call methods using this keyword.
this.ip2longConvert(ip);
}
}
Методы класса не используют ключевое слово функция в синтаксисе класса. Используйте ключевое слово это для ссылки на методы или свойства.
Обычно вы хотите оставить исходный код, чтобы мы могли понять природу вопроса, когда кто-то прочитает его в будущем.