Как изменить 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.
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
MvcBox
@MvcBox
Software Engineer [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 {}'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект
22 нояб. 2024, в 11:51
20000 руб./за проект