|

22.06.2019, 03:03
|
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
|
Странность в классах (начинающий)
Приветствую. Изучаю классы. Почему-то не могу создать более 1 константы для вывода данных итоговых. Ошибки в консоли нет. Мне собственно нужно, что можно было сколько угодно этих констант создать верно отображаемых.
Мой код
class RootElement{
constructor(tagName = "div"){
this.$el = document.querySelector(tagName)
}
append(){
document.querySelector(".wrapper").insertAdjacentElement("afterbegin", this.$el)
}
}
class Box extends RootElement{
constructor(color,size = 150,tagName){
super(tagName)
this.color = color
this.size = size
}
create(){
this.$el.style.background = this.color
this.$el.style.width = this.$el.style.height = `${this.size}px`
this.$el.append()
return this
}
}
const yellowBox = new Box("yellow", 150, "div").create()
const greenBox = new Box("green", 100, "div").create()
HTML-код содержит только минимальную разметку + класс wrapper.
Одна константа на странице отображается, вторая и любые прочие - нет. Подскажите, пожалуйста, что я делаю не так? Спасибо заранее.
|
|
|

22.06.2019, 03:38
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
<div class="wrapper"></div>
<script>
class RootElement {
constructor(tagName = "div") {
this.element = document.createElement(tagName);
}
append(element = document.body) {
element.appendCild(this.element);
}
}
class Box extends RootElement {
constructor(color, size = 150, tagName) {
super(tagName);
this.color = color;
this.size = size;
this.create();
}
create() {
this.element.style.background = this.color;
this.element.style.width = this.element.style.height = `${this.size}px`;
this.element.append();
return this;
}
}
const yellowBox = new Box("yellow", 150, "div");
const greenBox = new Box("green", 100, "div");
document.querySelector(".wrapper").append(yellowBox.element, greenBox.element);
</script>
А вообще лучше наследовать от HTMLElement
UPD
<div class="wrapper"></div>
<script>
class RootElement extends HTMLDivElement {
// то, что вы хотели, уже есть в HTMLDivElement
// может вы захотите здесь объявить свои методы!
}
class Box extends RootElement {
constructor(color, size = 150) {
super();
this.color = color;
this.size = size;
this.style.background = this.color;
this.style.width = `${this.size}px`;
this.style.height = `${this.size}px`;
}
}
customElements.define("custom-box", Box, { extends: "div" });
const yellowBox = new Box("yellow", 150);
const greenBox = new Box("green", 100);
document.querySelector(".wrapper").append(yellowBox, greenBox);
</script>
Последний раз редактировалось Malleys, 22.06.2019 в 03:53.
|
|
|

22.06.2019, 15:19
|
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
|
Спасибо, изучу))
|
|
|

22.06.2019, 15:20
|
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Сообщение от Malleys
|
<div class="wrapper"></div>
<script>
class RootElement {
constructor(tagName = "div") {
this.element = document.createElement(tagName);
}
append(element = document.body) {
element.appendCild(this.element);
}
}
class Box extends RootElement {
constructor(color, size = 150, tagName) {
super(tagName);
this.color = color;
this.size = size;
this.create();
}
create() {
this.element.style.background = this.color;
this.element.style.width = this.element.style.height = `${this.size}px`;
this.element.append();
return this;
}
}
const yellowBox = new Box("yellow", 150, "div");
const greenBox = new Box("green", 100, "div");
document.querySelector(".wrapper").append(yellowBox.element, greenBox.element);
</script>
А вообще лучше наследовать от HTMLElement
UPD
<div class="wrapper"></div>
<script>
class RootElement extends HTMLDivElement {
// то, что вы хотели, уже есть в HTMLDivElement
// может вы захотите здесь объявить свои методы!
}
class Box extends RootElement {
constructor(color, size = 150) {
super();
this.color = color;
this.size = size;
this.style.background = this.color;
this.style.width = `${this.size}px`;
this.style.height = `${this.size}px`;
}
}
customElements.define("custom-box", Box, { extends: "div" });
const yellowBox = new Box("yellow", 150);
const greenBox = new Box("green", 100);
document.querySelector(".wrapper").append(yellowBox, greenBox);
</script>
|
а в чем у меня все-таки проблема была? Чтобы понять механизм)
|
|
|

22.06.2019, 16:10
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,155
|
|
|
Сообщение от Иса Мирзоев
|
|
а в чем у меня все-таки проблема была?
|
вы не создавали элемент, а искали!!!
|
Сообщение от Иса Мирзоев
|
|
this.$el = document.querySelector(tagName)
|
взгляните на эту строку в примерах Malleys,
|
Сообщение от Malleys
|
|
this.element = document.createElement(tagName);
|
и не надо копировать сообщения целиком
|
|
|

24.06.2019, 01:03
|
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Сообщение от рони
|
вы не создавали элемент, а искали!!!
взгляните на эту строку в примерах Malleys,
и не надо копировать сообщения целиком
|
Спасибо, дошло))
|
|
|
|