Вы задаете довольно простые вопросы. Я бы порекомендовал вам пройти некоторые базовые курсы программирования, но вот ответы на ваши вопросы.
public static const DETAILS: String = "details";
Это означает объявить неизменяемую строку с именем DETAILS, к которой можно получить доступ за пределами моего класса, без предварительного создания экземпляра экземпляра.
Статический означает, что к члену можно получить доступ без создания экземпляра класса.
поэтому ProductThumbEvent.DETAILS - это способ доступа к статическим элементам DETAILS в вашем коде.
const говорит, что значение "details", присвоенное DETAILS, является постоянным и не может быть изменено.
super (type) говорит, что нужно вызвать конструктор базового класса (Events) и передать ему тип.
this.product = product говорит, что взять значение, переданное в параметр продукта, и присвоить его общедоступному члену Product.
Цель метода clone - вернуть новый экземпляр объекта. Можно было бы так же легко снова вызвать тот же конструктор, если бы они выбрали (при условии, что у них все еще есть надлежащие данные аргумента в области видимости), но оригинальный автор решил реализовать этот метод для выполнения задачи.