Dzieje się tak, ponieważ określona funkcja zdefiniowana w konstruktorze zastępuje tę, która jest dziedziczona przez prototyp.
Od EcmaScript specification:
Każdy obiekt stworzony przez konstruktora ma pośrednie odniesienie (zwany prototyp obiektu), aby wartości „prototypu” własności swojego konstruktora. Co więcej, prototyp może mieć niezerowe odniesienie do jego prototypu, i tak dalej; nazywa się to łańcuchem prototypowym . Kiedy odwołuje się do właściwości w obiekcie, , odwołanie jest do właściwości tej nazwy w pierwszym obiekcie w prototyp łańcucha, który zawiera właściwość o tej nazwie. W innych słowach najpierw przedmiot wymieniony bezpośrednio jest badany pod kątem takiej właściwości ; jeśli ten obiekt zawiera nazwaną właściwość, jest to właściwość , do której odnosi się odwołanie; jeśli ten obiekt nie zawiera nazwanej właściwości, prototyp dla tego obiektu jest badany następująco: ; i tak dalej.
W skrócie: szukając funkcji (lub dowolnej właściwości według jej nazwy), zaczynasz od obiektu, a następnie idziesz w górę łańcucha prototypów.
Bardzo dokładne wyjaśnienie: http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript –
FYI: Możesz zadzwonić do metody prototypowej, jeśli potrzebujesz: 'p. prototype.show.call (o) ' – Prinzhorn