Не удается прочитать свойство undefined - вызов метода внутри класса - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть класс машинописного текста, который содержит следующие данные:

getOrgList(oo: fhir.Organization) {
    var olist: orgRoles[] = [];
    var filtered = oo.extension.filter(this.getRoleExt);

    filtered.forEach(function (value) {
        var org = new orgRoles();
        value.extension.forEach(function (innerValue) {
            switch (innerValue.url) {
                case 'role':
                    org.roleName = innerValue.valueCoding.display;
                    break;
                case 'primaryRole':
                    org.primaryRole = innerValue.valueBoolean;
                    break;
                case 'activePeriod':
                    var periodType = innerValue.valuePeriod.extension[0].valueString;
                    var periodExt = innerValue.valuePeriod;
                    var periodDisplay= this.getPeriodDisplay(periodExt);
                    break;
                case 'status':
                    org.activeStatus = innerValue.valueString;
                    break;
            }
        });

        olist.push(org);
    });

    return olist;
}

В настоящий момент происходит сбой в строке

var periodDisplay= this.getPeriodDisplay(periodExt);

С ошибкой

 ERROR TypeError: Cannot read property 'getPeriodDisplay' of undefined

ОднакоgetPeriodDisplay определяется как следующий метод в том же классе.

getPeriodDisplay(pp) {
    return "++++";
}

У меня есть другой код, который вызывает getPeriodDisplay () извне класса, но вызов его из другого метода в классе, кажется, вызываетзадача

Есть идеи, как мне решить эту проблему?

1 Ответ

0 голосов
/ 20 декабря 2018

Вам нужно переключить обычные функции, чтобы функции стрелок имели доступ к правильному this (экземпляр класса):

getOrgList(oo: fhir.Organization) {
    var olist: orgRoles[] = [];
    var filtered = oo.extension.filter(this.getRoleExt);

    filtered.forEach((value) => {
        var org = new orgRoles();
        value.extension.forEach((innerValue) => {
            switch (innerValue.url) {
                case 'role':
                    org.roleName = innerValue.valueCoding.display;
                    break;
                case 'primaryRole':
                    org.primaryRole = innerValue.valueBoolean;
                    break;
                case 'activePeriod':
                    var periodType = innerValue.valuePeriod.extension[0].valueString;
                    var periodExt = innerValue.valuePeriod;
                    var periodDisplay= this.getPeriodDisplay(periodExt);
                    break;
                case 'status':
                    org.activeStatus = innerValue.valueString;
                    break;
            }
        });

        olist.push(org);
    });

    return olist;
}
...