function Muppet(age, hobby) {
  this.age = age;
  this.hobby = hobby; 
  
  this.answerNanny = function(){
	return "Everything's cool!";
  }
}

function SwedishChef(age, hobby, mood) {
  Muppet.call(this, age, hobby);
  this.mood = mood;
  
  this.cook = function() {
    return "Mmmm soup!";
  }
}

SwedishChef.prototype = new Muppet();

describe("About inheritance", function() {
  beforeEach(function(){
    this.muppet = new Muppet(2, "coding");
  	this.swedishChef = new SwedishChef(2, "cooking", "chillin");
  });
  
  it("should be able to call a method on the derived object", function() {
    expect(this.swedishChef.cook()).toEqual(FILL_ME_IN);
  });
  
  it("should be able to call a method on the base object", function() {
    expect(this.swedishChef.answerNanny()).toEqual(FILL_ME_IN);
  });
  
  it("should set constructor parameters on the base object", function() {
    expect(this.swedishChef.age).toEqual(FILL_ME_IN);
    expect(this.swedishChef.hobby).toEqual(FILL_ME_IN);
  });
  
  it("should set constructor parameters on the derived object", function() {
    expect(this.swedishChef.mood).toEqual(FILL_ME_IN);
  });
});

// http://javascript.crockford.com/prototypal.html
Object.prototype.beget = function () {
  function F() {}
  F.prototype = this;
  return new F();
}

function Gonzo(age, hobby, trick) {
  Muppet.call(this, age, hobby);
  this.trick = trick;
  
  this.doTrick = function() {
    return this.trick;
  }
}

//no longer need to call the Muppet (base type) constructor
Gonzo.prototype = Muppet.prototype.beget();
//note: if you're wondering how this line affects the below tests, the answer is that it doesn't.
//however, it does do something interesting -- it makes this work:
//  var g = new Gonzo(...);
//  g instanceOf Muppet //true

describe("About Crockford's inheritance improvement", function() {
  beforeEach(function(){
    this.gonzo = new Gonzo(3, "daredevil performer", "eat a tire");
  });
  
  it("should be able to call a method on the derived object", function() {
    expect(this.gonzo.doTrick()).toEqual(FILL_ME_IN);
  });
  
  it("should be able to call a method on the base object", function() {
    expect(this.gonzo.answerNanny()).toEqual(FILL_ME_IN);
  });
  
  it("should set constructor parameters on the base object", function() {
    expect(this.gonzo.age).toEqual(FILL_ME_IN);
    expect(this.gonzo.hobby).toEqual(FILL_ME_IN);
  });
  
  it("should set constructor parameters on the derived object", function() {
    expect(this.gonzo.trick).toEqual(FILL_ME_IN);
  });
});

@@ -631,34 +631,36 @@
 ()).toEqual(
-FILL_ME_IN
+%22Mmmm soup!%22
 );%0A  %7D);%0A  %0A
@@ -778,34 +778,44 @@
 ()).toEqual(
-FILL_ME_IN
+%22Everything's cool!%22
 );%0A  %7D);%0A  %0A
@@ -925,34 +925,25 @@
 ge).toEqual(
-FILL_ME_IN
+2
 );%0A    expec
@@ -972,34 +972,33 @@
 by).toEqual(
-FILL_ME_IN
+%22cooking%22
 );%0A  %7D);%0A  %0A
@@ -1112,34 +1112,33 @@
 od).toEqual(
-FILL_ME_IN
+%22chillin%22
 );%0A  %7D);%0A%7D);
@@ -2054,34 +2054,36 @@
 ()).toEqual(
-FILL_ME_IN
+%22eat a tire%22
 );%0A  %7D);%0A  %0A
@@ -2195,34 +2195,44 @@
 ()).toEqual(
-FILL_ME_IN
+%22Everything's cool!%22
 );%0A  %7D);%0A  %0A
@@ -2336,34 +2336,25 @@
 ge).toEqual(
-FILL_ME_IN
+3
 );%0A    expec
@@ -2377,34 +2377,45 @@
 by).toEqual(
-FILL_ME_IN
+%22daredevil performer%22
 );%0A  %7D);%0A  %0A
@@ -2532,18 +2532,20 @@
 ual(
-FILL_ME_IN
+%22eat a tire%22
 );%0A 

Change values in AboutInheritance.js