Передать объект «element» классу

#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. Это выглядит так, как будто вы пытаетесь разработать фабрику функций