Those empty functions are being used as constructor functions, or classes. Often, we’ll be defining properties in the new thing we create with a class, like a name or breed or age, but we don’t have to. In this case, the only reason for the constructor is to link into the prototype chain.
Ah! So if my understand is correct, the line is actually creating the object ‘Animal’ but leaving it without any properties or methods? But the object still exists, so that it can inherit prototypes?
Think of Animal as the pattern, the “blueprint” used to create each instance of Animal. Defining the function of telling Javascript what to do when we say
const octopus = new Animal();
The function simply defines the shape of that new thing, the instance of our constructor. An empty function creates an empty object (no properties) that is wired to the constructor’s prototype. Doing this, the instance can use any of those prototype methods or properties.