我试图以递归方式调用以下函数。
public getData(key,value){
this.htmlString += '<span style="color:cornflowerblue">'+key+' </span>:';
if(value instanceof Object){
Object.keys(value).forEach(function (keydata) {
let obj = value[keydata];
this.getData(keydata,value[keydata]);
console.log(key,obj,obj instanceof Object)
});
}else{
this.htmlString += '<span>'+value+'</span>';
}
return this.htmlString;
};
当我试图调用teh函数时,它显示错误“无法读取未定义的属性'getData'。代码中是否有任何错误或以其他任何方式执行此操作。
答案 0 :(得分:8)
forEach
接受回调,这是一个匿名函数,匿名函数中的this
在非严格模式下引用window
或在严格模式下引用undefined
。 / p>
您需要绑定上下文:
Object.keys(value).forEach(function (keydata) {
let obj = value[keydata];
this.getData(keydata,value[keydata]);
console.log(key,obj,obj instanceof Object)
}.bind(this));
或使用箭头功能:
Object.keys(value).forEach((keydata) => {
let obj = value[keydata];
this.getData(keydata,value[keydata]);
console.log(key,obj,obj instanceof Object)
});
或简单地将指针传递给this
作为forEach
的第二个参数:
Object.keys(value).forEach(function (keydata) {
let obj = value[keydata];
this.getData(keydata,value[keydata]);
console.log(key,obj,obj instanceof Object)
}, this);