javascript - 尽管在 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 时,它返回为未定义,尽管在控制台记录列表时显示它。
解决方案
关键是 forEach 并没有改变正在迭代的数组,它只是在迭代它。如果要返回已创建对象的数组,可以使用其他函数,如 map:
const myObjectArray = template.map(t => new t(model));
现在您可以访问 myObjectArray[0].html
注意 myObjectArray 是一个新数组并且模板没有改变。
顺便说一句,拥有一个名为 template 的变量来保存数组并不是一个好习惯,最好将其称为 templateArray 或 templates (明确表示它是一个数组)
推荐阅读
- linux - Linux VM上的Docker,性能?
- cookies - 如何组织用户查看帖子的存储
- java - 来自 Firebase 实时数据库的 equalTo 数据快照返回空值
- r - 当我在 R 中绘制图表时,所有字符都变成了奇怪的字符
- android - 使用 ViewPager 进行屏幕旋转 - FragmentManager 和 FragmentPagerAdapter 的问题
- python - 在 Python 3 中检查文件列表中的字符串
- php - python:在拦截器中读取 grpc proto 请求
- python - 气流:重试到特定时间
- ecmascript-6 - 等待 Promise 完成
- google-apps-script - Google 表格 - Google 应用程序脚本 - 获取完整表格数据和样式的方法