inner animal: scope of variables

by ozzymcduff

HTML

<div id="consolelog"></div>

JavaScript

var global1 = "global corp"; 

// Declaring our Dog object
var Dog = function () {
    
    // Declaring our Animal object
    var Animal = function () {
        var self = this;
        
        self.name = 'unknown';
    
        self.getName = function () {
            return self.name;
        }
        
        self.getGlobal = function(){
            return global1;
        };
    
        self.getPrivate = function(){
            return private;
        };
        
        return self;
    };
    
    // Dog extends animal
    var self = this;
    Animal.call(self);
    // A private variable here        
    var private = 42;

    // overriding the name
    self.name = "Bello";

    // Implementing ".bark()"
    self.bark = function () {
        return 'MEOW';
    }  

    return self;
};


// -- Done declaring --

// Creating an instance of Dog.
var dog = new Dog();
// Proving our case
$("#consolelog").html(
    ["Is dog an instance of Dog? ", dog instanceof Dog, "\n",
    dog.bark() +"\n", // Should be: "MEOW"
     'Should be: "MEOW"',
    dog.getName() +"\n", // Should be: "Bello"
     'Should be: "Bello"',
    dog.private +"\n", // Should be: 'undefined'
    "Should be: 'undefined'",
     dog.getPrivate() +"\n", // Should be: 'undefined'
    "Should be: 42",
     dog.getGlobal() +"\n", // Should be: 'undefined'
    "Should be: 'global corp'"
    ].join("\n<br>")
);