我有一个名为UrlBuilder的类,它遍历一个.json文件,然后构建URL。我可以循环遍历数据并打印正确的输出,但是当我试图将其推送到类构造函数中定义的数组时,我被告知数组是未定义的。
这是我的代码:
"use strict";
const DATA = require("../resources/data.json").services;
class UrlBuilder {
constructor() {
this.serviceArr = [];
}
static _iterateAndBuild(current_val, index, array) {
for(let path of current_val.paths) {
let url = current_val.baseURL + Object.values(path);
this.serviceArr.push(url);
}
let recHistUrl = current_val.server + current_val.recordHistoryUrl;
serviceArr.push(recHistUrl);
console.log("Pushing this value to array: " + recHistUrl);
}
buildServiceArr() {
DATA.forEach(UrlBuilder._iterateAndBuild);
}
}
module.exports = UrlBuilder;如您所见,我将回调函数从forEach中删除。因此,当我调用UrlBuilder.buildServiceArr时,它循环遍历数据对象并执行上面写的回调。
这是输出:
C:\Users\payton.juneau\Desktop\Me\Projects\Node\com.etouchmenu.serviceSpyGlass>node app.js C:\Users\payton.juneau\Desktop\Me\Projects\Node\com.etouchmenu.serviceSpyGlass\utilities\urlBuilder.js:13 this.serviceArr.push(url);^ TypeError:无法读取未定义at _iterateAndBuild、at _iterateAndBuild at Array.forEach () at UrlBuilder.buildServiceArr (C:\Users\payton.juneau\Desktop\Me\Projects\Node\com.etouchmenu.serviceSpyGlass\utilities\urlBuilder.js:23:14) at Object的属性“serviceArr”。(C:\Users\payton.juneau\Desktop\Me\Projects\Node\com.etouchmenu.serviceSpyGlass\app.js:10:12) at Module._compile (module.js:660:30) at Object.Module._extensions..js (module.js:671:10) at Module.load (module.js:573:32) at tryModuleLoad (module.js:513:12) at Function.Module._load (module.js:505:3)在Function.Module.runMain (module.js:701:10)
谢谢你提前给我时间!可能是像范围调查之类的傻事。
发布于 2018-01-16 22:35:36
DATA.forEach(UrlBuilder._iterateAndBuild);应该是
DATA.forEach(UrlBuilder._iterateAndBuild, this);因此,来自buildServiceArr的buildServiceArr被传递为this of _iterateAndBuild。
作为一个一般的文体评论,如果你有一个函数不应该是静态的,就把它放在类的后面。
class UrlBuilder {
// ...
buildServiceArr() {
DATA.forEach(iterateAndBuild);
}
}
function iterateAndBuild(current_val, index, array) {
// ...
}虽然对于您的情况,我不知道为什么它是静态的,而不是一个实例的方法。
class UrlBuilder {
// ...
_iterateAndBuild(current_val, index, array) {
// ...
}
buildServiceArr() {
DATA.forEach(this._iterateAndBuild, this);
}
}这会更符合你想做的事情。
发布于 2018-01-16 22:04:10
您应该能够通过使用
this.serviceArr.push(recHistUrl);https://stackoverflow.com/questions/48290528
复制相似问题