Не надо думать что ООП это прям святой грааль, и как только вы начнете все писать через классы у вас прям и кода станет меньше и он будет оптимальный. Единственное назначение ООП - существенно облегчить разработку и последующее сопровождение сложного софта (больших проектов).
бессмысленный код "типа" ООП
const datas = [
{
description: "new",
img: "https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png",
name: "Nike1",
price: 100
}, {
description: "classic",
img: "https://www.freepnglogos.com/uploads/puma-logo-png-1.png",
name: "Adidas1",
price: 120
},
{
description: "new",
img: "https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png",
name: "Nike2",
price: 200
}, {
description: "classic",
img: "https://www.freepnglogos.com/uploads/puma-logo-png-1.png",
name: "Adidas2",
price: 320
}
]
class Products {
constructor(name, price, description, img){
this.name = name;
this.price = price;
this.description = description;
this.img = img;
}
}
class Manager {
constructor(selector = '#tables', data = []) {
this.root = document.querySelector(selector) || document.body;
this.products = data.length === 0 ? this._demoProducts() : data;
}
_demoProducts() {
let nike = new Products("Nike", 100, "new-shoes","https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png");
let adidas = new Products("Adidas", 120, "classic-shoes","https://www.freepnglogos.com/uploads/puma-logo-png-1.png");
return [nike, adidas];
}
getHTMLTemplate() {
return this.products.map(function(product, i) {
return `<div class="info-goods" data-id='${i}'>
<div class="img"><img src=${product.img} width="80" height="80" alt='${product.name}'></div>
<div class="name">${product.name}</div>
<div class="price">${product.price}</div>
<div class="description">${product.description}</div>
</div>`
});
}
init(){
this.root.insertAdjacentHTML('beforeend', this.getHTMLTemplate().join('<hr>'));
}
}
const manager = new Manager();
manager.init();