Заинтересовался я тут сабжем
Ромбовидное наследование (англ. diamond inheritance) — ситуация в объектно-ориентированных языках программирования с поддержкой множественного наследования, когда два класса B и C наследуют от A, а класс D наследует от обоих классов B и C. При этой схеме наследования может возникнуть неоднозначность: если метод класса D вызывает метод, определенный в классе A (и этот метод не был переопределен в классе D), а классы B и C по-своему переопределили этот метод, то от какого класса его наследовать: B или C?
Поигрался немножко, и понял, что никакой неоднозначности тут не возникает и возникнуть в принципе не может.
A=function(){this.x=1}
B=function(){this.a=10; this.x="another_B"}
C=function(){this.b=20; this.x="another_C"}
tmp=new A
B.prototype=tmp
C.prototype=tmp
delete tmp
D=function(){}
tmp=new B
C.call(tmp)
D.prototype=tmp
console.log(tmp) // { a: 10, x: 'another_C', b: 20 }
delete tmp
d=new D
console.log(d.x, d.a, d.b) // another_C 10 20
Тут абсолютно очевидно, что D наследует от C, поскольку мы видим, что в строке C.call(tmp) мы затерли x новым значением.
Таким образом, мы видим, что данная проблема не является проблемой в общем смысле, а это быдло-дизайн-ЯП-специфичная проблема. Просто в некоторых «ЯП» слишком много подковерной возни.