There are basically 3 types of inheritance in javascript, according to the Javascript Good Parts book: Pseudoclassical , Prototypal, and Functional .
The one you just posted will fall under Pseudoclassical inheritance, where you emulate class behavior using constructor functions.
I find the Functional template more useful and flexible, which allows you to protect your variables (make them private).
var constructor = function (spec, my) { var that, other private instance variables; my = my || {};
Prototypal is that your objects are inherited directly from another useful object, which would look like they (useful objects) would be the prototype of your new object.
Object.beget = function (o) { var F = function () {}; F.prototype = o; return new F(); }; var a = {}
This is a lot of considerations for each of the templates, for example, Crockford says in his book "A functional template has a lot of flexibility. It requires less effort than a pseudo-classical template and gives us better encapsulation and information hiding and access to super-methods." But I also saw articles arguing differently, like http://bolinfest.com/javascript/inheritance.php
EDIT ------
If you want to learn different approbations for achievement of super methods, in the Functional template you can do the following:
Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; Object.method('superior', function (name) { var that = this, method = that[name]; return function ( ) { return method.apply(that, arguments); }; }); var archer = function (spec, accuracy) { var that = warrior(spec), super_displayInfo = that.superior('displayInfo'); that.getAccuracy = function() { return accuracy; }; that.setAccuracy = function(value) { accuracy = value; }; that.displayInfo = function (n) { var form = super_displayInfo() form.accuracy = that.getAccuracy(); return form; }; return that; };