JSFiddle - React, Tailwind, and code Playground

JavaScript

function Person() {
    
}

Person.prototype.speak = function() {
   console.log("I am " + this.personName);
};
    
Person.prototype.runAnimals = function() {
    this.animals.each(function(animal){
       animal.run();
    })
};
    
function Animal() {
    
}

Animal.prototype.run = function() {
    console.log("My Animal " + this.animalName+ "  is running");
}

var untypedPersons =  [{personName:"John",animals:[{animalName:"cheetah"},{animalName:"giraffe"}]} , {personName:"Smith",animals:[{animalName:"cat"},{animalName:"dog"}]} ];

    

function fromArray(arr, constructor) {
   return arr.map(function(obj){
       var typed = Object.create(constructor.prototype);
       // Now copy properties from the given object
       for (var prop in obj)  {
           typed[prop] = obj[prop];
       }
       return typed;
   });
}

var persons = fromArray(untypedPersons, Person);
// Attach prototype to each animals list in person
persons.each(function(person){
  person.animals = fromArray(person.animals, Animal);
});

persons.each(function(person){
  person.speak();
  person.runAnimals();  
});