javascript - 打字稿递归函数未定义
问题描述
对于 typescript/javascript 中的递归函数,我知道“this”上下文很棘手,我尝试使用箭头函数来避免上下文更改,但它仍然不起作用。
代码如下所示:
export interface Item {
label: string;
items?: Item[];
}
export class BannerTreeModel {
rootItems: Item[] = [];
getMaxDepthSubtree(root_item: Item) {
let max_depth = 0;
if (root_item.items) {
root_item.items.forEach((child) => {
max_depth = Math.max(max_depth, this.getMaxDepthSubtree(child));
});
}
return ++max_depth;
}
}
并调用该函数,代码如下:
let model: BannerTreeModel = new BannerTreeModel();
model.rootItems = [{ label: 'item1', items: [{label: 'item2'}, {label: 'item3'}] }];
model.getMaxDepthSubtree(model.rootItems[0]);
在调试模式下,this
inthis.getMaxDepthSubtree(child))
是未定义的,因此我undefined function getMaxDepthSubtree
在这一行中遇到了错误。任何建议如何解决它?
解决方案
在 forEach 中,this
指的是全局window
对象。
尝试将类上下文存储在变量中_this
:
export class BannerTreeModel {
rootItems: Item[] = [];
var _this = this;
getMaxDepthSubtree(root_item: Item) {
let max_depth = 0;
if (root_item.items) {
root_item.items.forEach((child) => {
max_depth = Math.max(max_depth, _this.getMaxDepthSubtree(child));
});
}
return ++max_depth;
}
}
推荐阅读
- c++ - 没有活动项目的 KDevelop 和 Cppcheck
- sql - 在 SQL 中查找重叠事件并保留更长的时间
- python - python selenium 按类获取按钮并单击
- ios - --ion-safe-area-top 在 iOS 上无法正常工作
- node.js - 什么是 har-validator,我该如何解决这个问题
- go - 没有收到来自远程调用的错误,一直到超时 Go gRPC + micro + protobuf
- x509certificate - 使用 Vault 设置 Spinnaker 证书配置 (x.509)
- json - 如何从 JSON 响应中提取对象属性
- windows - Windows 添加到文本文件上下文菜单“以尾部模式打开”
- angular - 在循环方法中没有从 console.log 获取任何数据