В ES6 возможность определять анонимные классы обеспечивает синтаксический сахар для объявлений классов. Несмотря на удобство, немедленное создание экземпляров таких классов может привести к множеству проблем.
Когда экземпляр анонимного класса создается немедленно, JavaScript создает новую функцию-конструктор и динамически создавать прототип объекта. В результате каждой оценки выражения создается отдельная функция-конструктор и прототип.
Эта практика имеет несколько существенных недостатков:
Отсутствие возможности повторного использования:
В отличие от именованных классов, анонимные классы, экземпляры которых создаются немедленно, каждый раз создают новый конструктор и прототип. Это означает, что несколько экземпляров не будут использовать один и тот же прототип, теряя преимущества наследования классов и совместного использования прототипов.
Ошибка синглтона:
Если целью использования этого шаблона является создание одноэлементный объект, он терпит неудачу. Функция конструктора остается доступной, что позволяет создавать несколько экземпляров с использованием нового объектаentity.constructor.
Консенсус ясен: следует избегать немедленного создания экземпляров анонимных классов. Простой объектный литерал обеспечивает более эффективную и простую альтернативу:
var entity = { name: 'Foo', getName: function() { return this.name; } };
Хотя новый шаблон класса приемлем в некоторых других языках, в JavaScript он ведет себя иначе. Динамическая природа создания классов в JavaScript лишает эти языки преимуществ.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3