首页 > 解决方案 > 尽管在 console.log 中显示其存在,但无法访问对象数据成员。尝试访问返回未定义

问题描述

我有一个匿名函数数组,它们是构造函数,它们接受一个参数,然后使用它来为此构建一个 var。

var template = [
     function (model){ this.html = "blah" + model.something},
     function (model){ this.html = "blah" + model.something},
]

我遍历数组并使用 new 关键字将每个函数构造成一个对象。

template.foreach( template => template = new template(model))

这似乎可行,因为当我使用 console.log 时,它会将模板显示为具有数据成员 this.html 的对象列表,并且其填充正确。

但是,当我尝试访问 template[0].html 时,它返回未定义。

当我typeof对列表的一个元素执行操作时,它表示函数,但浏览器将其显示为一个对象,最重要的是,当我执行 template[0].html 时,它返回为未定义,尽管在控制台记录列表时显示它。

标签: javascriptarraysfunctionobject

解决方案


关键是 forEach 并没有改变正在迭代的数组,它只是在迭代它。如果要返回已创建对象的数组,可以使用其他函数,如 map:

const myObjectArray = template.map(t => new t(model));

现在您可以访问 myObjectArray[0].html

注意 myObjectArray 是一个新数组并且模板没有改变。

顺便说一句,拥有一个名为 template 的变量来保存数组并不是一个好习惯,最好将其称为 templateArray 或 templates (明确表示它是一个数组)


推荐阅读