You are using one of the limitations of JavaScript this and prototype inheritance, directly because you are trying to create an inheritance schema class in a language that does not support it directly.
Even with Backbone, you are usually not recommended to use "super" directly because of the limitations you have outlined, etc.
Problem fixing
A common solution is to call your prototype object directly, instead of trying to disguise it using a "super" link.
UsageGraph = Graph.extend({ generateScale: function () { Graph.prototype.generateScale.call(this);
In working JSFiddle: http://jsfiddle.net/derickbailey/vjvHP/4/
The reason this works is due to "this" in JavaScript. When you call a function, the keyword "this" is set depending on how you call the function, and not where the function is defined.
In the case of the call to the "generateScale" method in this code, this is the designation point for calling the generateScale function, which sets the context. In other words, since the code reads prototype.generateScale , the function call context (the keyword "this") is set to the prototype object, which is the prototype of the Graph constructor function.
Since Graph.prototype now the context of the call to generateScale , this function will work with the expected context and behavior.
Why this.constructor. super failed
Conversely, when you made this.constructor._super.generateScale , you enabled JavaScript to skew the context in a way you did not expect because of the this keyword at the beginning.
This is the third level of your hierarchy that causes a problem with "this". You call EUG.generateScale , which explicitly sets this to the EUG instance. The prototype search for the generateScale method returns to the Graph prototype to invoke the method because the method was not found directly in the EUG instance.
But this already configured for an EUG instance, and a prototype JavaScript search matches this . So, when the UsageGraph generateScale prototype is called, this set to an EUG instance. Therefore, calling this.constructor.__super__ will be evaluated from the EUG instance and will look for the UsageGraph prototype as __super__ , which means that you are going to call the same method on the same object, in the same context. So an infinite loop.
The decision not to use this in prototypical searches. Use the named function and prototype directly, as I showed in the solution, and JSFiddle.