typescript - 无法读取未定义的属性 - 类中的方法调用
问题描述
我有一个包含以下内容的打字稿类
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(),但是从类中的不同方法调用它似乎会导致问题
关于我应该如何解决这个问题的任何想法?
解决方案
您需要为箭头函数切换常规函数才能访问正确的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;
}
推荐阅读
- python-3.x - 将 curl POST 转换为 urllib 请求 python3
- android-studio - 找不到参数 junit:junit:4.12 的方法 testImplementation()
- typescript - Typescript 动态生成变量名
- javascript - How to use jQuery UI Sortable to intersect properly?
- .net - .Net HttpClient URI 无效:Uri 字符串太长
- html - 获取 HTML 有序列表中元素的前缀
- python - Anaconda3 安装挂在 install.py 上
- c++ - 在 C++ 中实现串联继承
- spotfire - Conditionally scale values in a crosstable according to a category in Spotfire
- javascript - 同时发送图像和 JSON