Hey Matt,
You’re getting there 
Some things to note about your example
To recap:
function animal(){
this.details = function() {
this.name = "rabbit";
this.location = "field";
}
}
pet1 = new animal();
pet2 = new pet1.details()
alert(pet2.name);
“animal()” is only truly an object when the function is called with the “new” keyword (like you have done).
“animal.details()” in your example is not an object that can be instantiated because it is not a constructor. (in fact, calling it with the “new” keyword as you have done should actually throw a JavaScript error (animal.details() is not a constructor)
If you want to streamline this, you can set the details for an object either through the constructor or through a setter method. And then get them with a getter method if you like 
“Setter” and “getter” methods are usually used to either “set” or “get” a specific property (e.g. this.name). While you can simply use pet.name = “dog” (or to get it usepet.name) because they are public properties.
A private property like “someLocalVar” in my initial example should only be accessible via its getter method and only changeable via its setter method, you can not modify it by trying pet.someLocalVar because you would then be creating a new public property on the pet object.
Now, let’s look at setting properties through the Constructor and through Setters.
Through the constructor:
//basic instantiable object
var Animal = function(name, location){
this.name = name;
this.location = location;
}
var pet1 = new Animal("Dog", "Garden");
//you now have instant access to the name and location because they were passed in through the constructor
console.log(pet1.name);
console.log(pet1.location);
Through setter methods:
var Animal = function(){
//specific setter method for the name
this.setName = function(name) {
this.name = name;
}
//specific setter method for the location
this.setLocation = function(location) {
this.location = location;
}
//generic setter method
this.setDetail = function(detailName, detailContents) {
this[detailName] = detailContents;
}
}
var pet1 = new Animal();
//you now can set the name, location, whatever
pet1.setName("Duck");
pet1.setLocation("Pond");
pet1.setDetail("type", "Bird");
//now that properties have been set, you can access them.
console.log(pet1.name);
console.log(pet1.location);
console.log(pet1.type);
Hope this made things a little clearer. (And that I haven’t overloaded your brain too much).