Потому, что:
function Rabbit() {}
console.log(Object.getOwnPropertyDescriptor(Rabbit, 'prototype')); // { value: {}, writable: true, enumerable: false, configurable: false }
class Rabbit {}
console.log(Object.getOwnPropertyDescriptor(Rabbit, 'prototype')); // { value: {}, writable: false, enumerable: false, configurable: false }
Найдите разницу :)
А если бы использовали
'use strict';
то сразу бы увидели в чем проблема, так как при попытке выполнить
Rabbit.prototype = {};
получили бы ошибку:
TypeError: Cannot assign to read only property 'prototype' of function 'class Rabbit {}'