Skip to content

Instantly share code, notes, and snippets.

@dperrymorrow
Last active August 29, 2015 14:01
Show Gist options
  • Save dperrymorrow/4d00b937bfc1ea641672 to your computer and use it in GitHub Desktop.
Save dperrymorrow/4d00b937bfc1ea641672 to your computer and use it in GitHub Desktop.
Prototype extension with Javascript
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="[add your bin description]" />
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
</body>
</html>
// function for extending a class
function extend (base, constructor) {
var proto = function () {};
proto.prototype = base.prototype;
constructor.prototype = new proto();
constructor.prototype.constructor = constructor;
}
// parent class
function Animal (name) {
this.animalName = name;
console.log("////== Animal Constructor ==/////");
console.log("An animal named " + name);
}
Animal.prototype.makeNoise = function (noise) {
console.log("////== Animal makeNoise() ==////");
console.log(noise + ", I can make noise...");
};
// subclass
function Dog (name) {
// call the super
Animal.call(this, name);
console.log("////== Dog Constructor ==/////");
console.log("I am a Dog named " + this.animalName);
}
// important that this happens before you override methods on parent class
extend(Animal, Dog);
Dog.prototype.makeNoise = function (noise) {
Animal.prototype.makeNoise.call(this, noise);
console.log("////== Dog makeNoise() ==////");
console.log("I am a Dog, I like to " + noise);
};
// Usage
var dog = new Dog("Sparky");
dog.makeNoise("Bark!!");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment