Как изменить Class.prototype в JS6?

Всем привет! Изучаю JavaScript. В процессе изучения наткнулся на такой пример:

function Rabbit() {}
let rabbit = new Rabbit();

// заменяем прототип
Rabbit.prototype = {};

// ...больше не rabbit!
alert( rabbit instanceof Rabbit ); // false

Подскажите, почему не работает такой же трюк с классами?

class Rabbit {}
let rabbit = new Rabbit();

// заменяем прототип
Rabbit.prototype = {};

alert( rabbit instanceof Rabbit ); // true

Rabbit — по сути функция-конструктор. Каждая функция в JS имеет свойство prototype, которая указывает на объект-прототип. Почему в случае с классами я не могу заменить этот прототип на пустой объект? Т.е. чтобы в нем не содержалось свойства constructor.
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
MvcBox
@MvcBox
Software Developer [C/C++/JS(for Node.js)/etc]
Потому, что:
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 {}'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
08 мая 2024, в 19:51
10000 руб./за проект
08 мая 2024, в 19:42
150000 руб./за проект
08 мая 2024, в 19:41
1500 руб./за проект