Я думаю, вы должны прочитать немного о JS OOP. ES6 добавляет хороший синтаксический сахар, который может помочь вам добиться того, чего вы хотите, в меньшем количестве строк кода. Подробнее here.
Однако, если вы не хотите иметь проблемы с цепочкой прототипов, здесь более простым способом достижения того, что вы хотите:
function chain (baseFunc, func) {
return function() {
var args = [].slice.call(arguments, 0);
args.unshift(baseFunc);
return func.apply(this, args);
};
}
Использование:
var obj = {
doSome: function (a, b) { return a + b; }
};
obj.doSome(4, 5); // 9
obj.doSome = chain(obj.doSome, function (baseFunc, a, b) {
var result = baseFunc(a, b);
return result + 10;
});
obj.doSome(4, 5); // 19
Вы можете пойти один шаг дальше и избавиться от задания:
function extend (instance, method, func) {
instance[method] = chain(instance[method], func);
}
extend(obj, "doSome", function (baseFunc, a, b) {
var result = baseFunc(a, b);
return result + 2;
});
obj.doSome(4, 5); // 21
Вы пытаетесь моделировать полиморфизм? –