I've been spending all day brushing up on JS and relearning it. Some questions...

1) Using prototype basically makes the method (in this case bark) global to all Dog's?
Code:
function Dog (breed) {
  this.breed = breed;
};

// here we make buddy and teach him how to bark
var buddy = new Dog("golden Retriever");
Dog.prototype.bark = function() {
  console.log("Woof");
};
buddy.bark();

// here we make snoopy
var snoopy = new Dog("Beagle");
/// this time it works!
snoopy.bark();
2)
Code:
// the original Animal class and sayName method
function Animal(name, numLegs) {
    this.name = name;
    this.numLegs = numLegs;
}
Animal.prototype.sayName = function() {
    console.log("Hi my name is "+this.name);
};

// define a Penguin class
function Penguin(name)
{
  this.name=name;
  this.numLegs=2;
};

// set its prototype to be a new instance of Animal
Penguin.prototype=new Animal();
Using the last line. That means that if I wanted to, I could make use of Animal.sayName() (do I call it like that?)? Now that (thanks to the last line) the Penguin prototype is set to Animal, I can access the methods and classes and properties of Animal, right?

3)
Code:
function Penguin(name) {
    this.name = name;
    this.numLegs = 2;
}

// create your Emperor class here and make it inherit from Penguin
function Emperor(name)
{
  this.name=name;  
};
Penguin.prototype=new Emperor();
// create an "emperor" object and print the number of legs it has
var emperor=new Emperor("ryan");
console.log(emperor.numLegs);
Shouldn't this work? It gives out undefined, although shouldn't inheritance let me access the numLegs? I set the prototype of it to make it accessible.

I'll have more later. Have to go to bed now.