Определять метод в конструкторе = создавать новую копию функции для каждого нового экземпляра класса. Это не есть хорошо: создав 10 экземпляров класса, мы получим 10 одинаковых функций (зачем?).
Записывая метод в prototype, мы не присваиваем его непосредственно объекту. Метод окажется в свойстве __proto__ созданного экземпляра. Каждый экземпляр нашего класса имеет свойство __proto__ и это свойство у каждого экземпляра ссылается на ОДИН и то тот же объект, в который мы и записали наш метод, используя prtototype. Такми образом, записав функцию func в prototype и потом создав 10 экземпляров класса, мы получим всего ОДНУ функцию func, сохраненную в __proto__. Все созданные объекты будут использовать эту ЕДИНСТВЕННУЮ функцию, хранящуюся в общем месте.
Вот как-то так.