Используя классы и метод-прототип, ваш код будет выглядеть следующим образом:
class Box {
constructor() {
this.element = document.createElement("div");
this.painted = false;
}
init() {
this.element.className = "box";
this.element.addEventListener("mouseover", () => {
console.log("you are touching this box!");
this.change_color("red");
});
}
change_color(color) {
this.element.style.background = color;
}
}
Теперь init
и change_color
включены Box.prototype
, а не непосредственно в каждом экземпляре.
Или, скажем, я хочу создать функцию, которая раскрашивает все поля на моей странице. Как бы вы go о создании Прототипа сделали это?
Один из вариантов - сохранить каждый экземпляр Box в массиве в конструкторе, а затем выполнить итерацию по нему, например:
const boxes = [];
// ...
constructor() {
boxes.push(this);
}
// ...
boxes.forEach(box => box.change_color('green'));
Если у каждого блока есть init
, вызываемый к тому времени, когда вы хотите покрасить все блоки, вы также можете добавить тег стиля, без итерации или массива:
document.body.appendChild(document.createElement('style')).textContent = `
.box {
background-color: green;
}
`;