 <p>Here's the basic pattern, see comments:</p> <p><div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>// === Projectile // The constructor function Projectile(x, y) { // Do things to initialize instances... this.x = x; this.y = y; } // Add some methods to its prototype Projectile.prototype.update = function() { // This is a method on `Projectile` snippet.log("Projectile#update"); }; Projectile.prototype.checkIfWallHit = function(){ snippet.log("Projectile#checkIfWallHit"); }; // ==== BasicShot // The constructor function BasicShot(x, y, left) { // Give Projectile a chance to do its thing Projectile.call(this, x, y); this.left = left; } // Hook it up to `Projectile` BasicShot.prototype = Object.create(Projectile.prototype); BasicShot.prototype.constructor = BasicShot; // JavaScript does this by default, so let's maintain it when replacing the object // Add methods to its prototype BasicShot.prototype.update = function() { snippet.log("BasicShot#update"); }; // === Usage snippet.log("Using Projectile"); var p = new Projectile(1, 2); p.update(); // Projectile#update p.checkIfWallHit(); // Projectile#checkIfWallHit snippet.log("Using BasicShot"); var c = new BasicShot(1, 2, 3); c.update(); // BasicShot#update p.checkIfWallHit(); // Projectile#checkIfWallHit</code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --&gt; &lt;script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"&gt;&lt;/script&gt;</code></pre> </div> </div> </p> <hr> <p>As of ES6, the next version of JavaScript, that gets a <strong>lot</strong> simpler:</p> <pre><code>// REQUIRES ES6!! class Projectile { constructor(x, y) { this.x = x; this.y = y; } update() { snippet.log("Projectile#update"); } checkIfWallHit() { snippet.log("Projectile#checkIfWallHit"); } }; class BasicShot extends Projectile { constructor(x, y, left) { super(x, y); this.left = left; } update() { snippet.log("BasicShot#update"); } } </code></pre> <p>It does the same thing as first example above under the covers, the new syntax is just syntactic sugar. But it's really good sugar.</p>