これが私の解決策です。これは、LorenzoPolidoriの 回答で説明されている標準的なプロトタイプの継承方法に基づいています。。
まず、これらのヘルパーメソッドを定義することから始めます。これにより、後で理解しやすく、読みやすくなります。
Function.prototype.setSuperclass = function(target) {
    
    this._superclass = target;
    
    
    this.prototype = Object.create(this._superclass.prototype);
    
    this.prototype.constructor = this;
};
Function.prototype.getSuperclass = function(target) {
    
    return this._superclass;
};
Function.prototype.callSuper = function(target, methodName, args) {
    
    if (arguments.length < 3) {
        return this.callSuperConstructor(arguments[0], arguments[1]);
    }
    
    if (args === undefined || args === null) args = [];
    var superclass = this.getSuperclass();
    if (superclass === undefined) throw new TypeError("A superclass for " + this + " could not be found.");
    var method = superclass.prototype[methodName];
    if (typeof method != "function") throw new TypeError("TypeError: Object " + superclass.prototype + " has no method '" + methodName + "'");
    return method.apply(target, args);
};
Function.prototype.callSuperConstructor = function(target, args) {
    if (args === undefined || args === null) args = [];
    var superclass = this.getSuperclass();
    if (superclass === undefined) throw new TypeError("A superclass for " + this + " could not be found.");
    return superclass.apply(target, args);
};
これで、クラスのスーパークラスをで設定できるだけでなくSubClass.setSuperclass(ParentClass)、オーバーライドされたメソッドをSubClass.callSuper(this, 'functionName', [argument1, argument2...]):で呼び出すこともできます。
function Transform() {
    this.type = "2d";
}
Transform.prototype.toString = function() {
    return "Transform";
}
function Translation(x, y) {
    
    Translation.callSuper(this, arguments);
    
    this.x = x;
    this.y = y;
}
Translation.setSuperclass(Transform);
Translation.prototype.toString = function() {
    return Translation.callSuper(this, 'toString', arguments) + this.type + " Translation " + this.x + ":" + this.y;
}
function Rotation(angle) {
    
    Rotation.callSuper(this, arguments);
    
    this.angle = angle;
}
Rotation.setSuperclass(Transform);
Rotation.prototype.toString = function() {
    return Rotation.callSuper(this, 'toString', arguments) + this.type + " Rotation " + this.angle;
}
translation = new Translation(10, 15);
console.log(translation instanceof Transform); 
console.log(translation instanceof Translation); 
console.log(translation instanceof Rotation); 
console.log(translation.toString()) 
確かに、ヘルパー関数を使用しても、ここでの構文はかなり厄介です。ありがたいことに、ECMAScript 6では、構文上の糖衣構文(最大限に最小限のクラス)が追加されて、物事がより美しくなりました。例えば:
class Transform {
  constructor() {
    this.type = "2d";
  }
  toString() {
    return "Transform";
  } 
}
class Translation extends Transform {
  constructor(x, y) {
    super(); 
    
    this.x = x;
    this.y = y;
  }
  toString() {
    return super(...arguments) + this.type + " Translation " + this.x + ":" + this.y;
  }
}
class Rotation extends Transform {
  constructor(angle) {
    
    super(...arguments);
    
    this.angle = angle;
  }
  toString() {
    return super(...arguments) + this.type + " Rotation " + this.angle;
  }
}
translation = new Translation(10, 15);
console.log(translation instanceof Transform); 
console.log(translation instanceof Translation); 
console.log(translation instanceof Rotation); 
console.log(translation.toString()) 
ECMAScript 6はこの時点ではまだドラフト段階であり、私が知る限り、主要なWebブラウザーには実装されていないことに注意してください。ただし、必要に応じて、Traceurコンパイラのようなものを使用ECMAScript 6して、単純な古いECMAScript 5ベースのJavaScriptにコンパイルすることができます。Traceurを使用してコンパイルされた上記の例をここで見ることができます。