реагировать нативный TypeError (..) не является функцией - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу отобразить изображение и соответствующий текст из объекта, выбранного случайным образом из массива.

По сути, я планирую использовать эту цепочку, чтобы получить как имя, так и изображение: ингридиент <- ингридиентArray <- getRandomIngredient <- getIngredientImage (& getIngredientName) </p>

Я уверен, что есть кое-что базовое, что я просто не понимаю в объектно-ориентированном программировании, но не могу заставить его работать.

ингридиентArray:

const ingredient1 = new Ingredient("green salad", require('./app/components/img/base/green_salad.jpg'));
const ingredient2 = new Ingredient("mixed salad", require('./app/components/img/base/mixed_salad.jpg'));
var ingredientArray = ["ingredient1", "ingredient2"]

getRandomIngredient:

function getRandomIngredient (arr){
  if (arr && arr.length) {
    return arr[Math.floor(Math.random() * arr.length)];
  }
}

class Ingredient:

function Ingredient (ingredientName, ingredientImage){
  this.ingredientName = ingredientName;
  this.ingredientImage = ingredientImage;

  Ingredient.prototype.getIngredientName = function(){
    return this.ingredientName;
  }

  Ingredient.prototype.getIngredientImage = function(){
    return this.ingredientImage;
  }
}

Что я хотел бы сделать:

<Image source = {getRandomIngredient(ingredientArray).getIngredientImage()}

Но я получаю следующее сообщение об ошибке:

TypeError: getRandomIngredient(...).getIngredientImage is not a function

Если я вызываю функцию getIngredientImage () напрямую, я получаю рабочий результат:

<Image source = {base1.getIngredientImage()} />

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Попробуйте добавить переменные в ваш "componentArray" вместо идентификаторов "string", которые вы используете для своих констант.IE изменить

var ingredientArray = ["ingredient1", "ingredient2"]

на

var ingredientArray = [ingredient1, ingredient2]
0 голосов
/ 26 февраля 2019

Нет метода getIngredientImage, потому что getRandomIngredient(ingredientArray) не возвращает экземпляр Ingredient.Поскольку ingredientArray является массивом строк, а не Ingredient экземпляров.

Это должно быть:

var ingredientArray = [ingredient1, ingredient2]
...