#javascript #class #ecmascript-6 #constructor #typeerror
#javascript #класс #ecmascript-6 #constructor #ошибка типа
Вопрос:
У меня есть два класса в отдельных модулях «project» и «gallery». Один класс предназначен для объекта, который хранит данные об одном проекте, а другой — для объекта, который хранит все проекты.
Я пытаюсь передать объект «element» в объект «gallery», сохранить его в конструкторе, а затем использовать один из методов для передачи в объект «project».
ПРАВКА 2: Мой код является:
gallery.js:
import {project} from './project.js';
class gallery
{
constructor(selector)
{
this.projects = [];
let parent = document.createElement("div");
Object.assign(this, parent);
this.parent = selector;
}
AddProject(name, imgsrc, desc, tags)
{
const temp = new project(name,imgsrc,desc,tags);
this.projects.push(temp);
}
PrintCallback(currentValue, index, arr)
{
currentValue.PrintImage(this.parent);
}
PrintGallery()
{
this.projects.forEach(this.PrintCallback);
}
}
document.addEventListener("DOMContentLoaded", function(event) {
let gallerySelector = document.querySelector("#portfolio-gallery");
const grafika = new gallery(gallerySelector);
grafika.AddProject("aaa","logo.png","qwerty",['aaa']);
grafika.AddProject("aaa","baner.png","aaa",['aaa']);
grafika.AddProject("aaa","kolo.png","aaa",['aaa']);
grafika.AddProject("aaa","plakietka.png","aaa",['aaa']);
grafika.AddProject("aaa","stark.png","aaa",['aaa']);
grafika.AddProject("aaa","targaryen.png","aaa",['aaa']);
grafika.AddProject("aaa","plakat.png","aaa",['aaa']);
grafika.PrintGallery();
});
project.js:
export class project
{
constructor(name,img,desc,tags)
{
this.name = name;
this.desc = desc;
this.imgsrc = img;
this.tags = tags;
}
CreateDiv(code,cssClass)
{
const template = document.createElement("div");
template.innerHTML = code;
template.classList.add(cssClass);
return template;
}
PrintDesc(selector)
{
let parent = document.createElement('div');
parent = selector;
const content =
'<h1>' this.name '</h1>' '<p>' this.desc '</p>' '<h4>' this.tags.join(",
") '</h4>'
const content_div = this.CreateDiv(content,"project-content");
parent.appendChild(content_div);
}
PrintImage(selector)
{
let parent = document.createElement('div');
parent = selector;
const img = '<img src="grafika/' this.imgsrc '">';
const img_div = this.CreateDiv(img,"project-img");
img_div.classList.add("tile");
parent.appendChild(img_div);
$(parent).hide();
$(parent).fadeIn(500);
}
};
Комментарии:
1. Как определяется метод (класс?)
PrintImage()
? Кстати, обычной практикой является использование только первой буквы имени класса в верхнем регистре.2.
PrintImage()
является методом класса «project». Я отредактировал сообщение, так что теперь вы можете это проверить.3. Третий примерный блок — это галерея классов, но он вызывает метод
PrintImage()
… разве это не должен быть класс project вместо этого? Иначе как наследуется галерея классовPrintImage()
? Я не вижуextend
илиsuper
…4. Класс «gallery» содержит массив объектов «project» —
this.projects = []; I fill this array with objects in a different method. So
currentValue` является элементом этого массива. Я также упомяну, что методPrintCallback
вызывается функцией forEach().5. Это выглядит так, как будто вы пытаетесь разработать фабрику функций