Цикл по функции конструктора в JS не работает - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь l oop через массив и использовать эти массивы в качестве имен для функции конструктора. Но это говорит о том, что моя функция конструктора не определена. Ниже приведено изображение моего кода и его вывод на консоль

Вот изображение моего кода и сообщение об ошибке :

Here is the image of my code and the error message

function AnimalMaker(name) {
  return {
    speak: function() {
      console.log("my name is", name);
    }
  };
};

var animalNames = ['Sheep', 'Liger', 'Big Bird'];

var farm = [];

for(var i = 0; i < animalNames.length; i++) {
  farm.push(AnimalMaker(animalNames[i]));
}

console.log(farm);

1 Ответ

0 голосов
/ 10 апреля 2020

Я сделаю несколько предположений здесь. Похоже, ваш код оценивается какой-то библиотекой (eval-вызов упоминается в сообщении об ошибке). Может случиться так, что он уклоняется от блока кода за блоком отдельно и эффективно создает несколько контекстов. Теперь функция AnimalMaker находится в одном, а вызов - в другом. Таким образом, действительно, в контексте вызова функция не определена.

Чтобы справиться с этим, я бы определил функцию в хорошо известном общем контексте. Например. если вы выполняете свой код в браузере, вы можете определить свою функцию следующим образом:

window.AnimalMaker = function(name) { ... }

Вызов остается неизменным, имеет window в контексте и не должен иметь проблем с вызовом функции.

(если это не сработает, вам, вероятно, нужно дать больше информации о том, как вы выполняете код)

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