Kaum hab ich mein Problem beschrieben und bin eine rauchen gegangen ist mir eine Lösung eingefallen: Anstatt in C einfach nur this.set = function() {...} auszuführen speicher ich vorher this.set in einer lokalen Variable, also wie folgt:
function C() {
B.call(this);
var baseSet = this.set;
this.set = function(val) {
if(val > 10) throw new Error("error");
baseSet.call(this, val);
}
}
C.prototype = Object.create(B.prototype);
Diese Lösung funktioniert zwar, aber es wirkt irgendwie nicht richtig für mich.