Невозможно получить доступ к объекту datamember, несмотря на то, что показывает его существование в console.log.Попытка доступа возвращает неопределенный - PullRequest
0 голосов
/ 13 июня 2018

У меня есть массив анонимных функций, которые являются конструкторами, они принимают параметр, а затем используют его для построения переменной var.

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

Я перебираю массив и конструирую каждую функцию в объектиспользуя новое ключевое слово.

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

Кажется, это работает, потому что когда я console.log, он показывает шаблон в виде списка объектов с элементом данных this.html, и он заполняется правильно.

Однако, когда я пытаюсь получить доступ к шаблону [0] .html, он возвращает неопределенное значение.

Когда я делаю typeof для элемента списка, он говорит «функция», но браузер показывает егокак объект, и что наиболее важно, когда я делаю template [0] .html, он возвращается как неопределенный, несмотря на то, что отображается, когда я консоль регистрирую список.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Дело в том, что forEach не изменяет массив, который повторяется, он просто повторяет его.Если вы хотите вернуть массив уже созданных объектов, вы можете использовать другую функцию, например map:

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

Теперь вы можете получить доступ к myObjectArray [0] .html

Убедитесь, что myObjectArray являетсяновый массив и шаблон не изменяются.

Кстати, наличие переменной с именем template, которая содержит массив, не является хорошей практикой, лучше назвать ее templateArray или templates (поясните, что это массив)

0 голосов
/ 13 июня 2018
  1. это должно быть forEach() вместо foreach()

  2. Вы всегда должны возвращать что-то в своей функции.

Это очень странный способ использования this, потому что когда вы сохраняете функцию в массиве, this ссылается на объект, где вы вызываете эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...