次の関数を再帰的に呼び出そうとしています。
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;
};
関数を呼び出そうとしたときに、「未定義のプロパティ 'getData'を読み取れません。コードに問題があるか、これを行う他の方法がありますか?」というエラーが表示されました。
forEach
は、匿名関数であるコールバックを受け入れます。匿名関数内のthis
は、非厳密モードのwindow
または厳密モードのundefined
を参照します。
コンテキストをバインドする必要があります:
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
の2番目の引数としてforEach
に渡します。
Object.keys(value).forEach(function (keydata) {
let obj = value[keydata];
this.getData(keydata,value[keydata]);
console.log(key,obj,obj instanceof Object)
}, this);