#javascript #ecmascript-6
Вопрос:
Допустим, у меня есть класс с именем Card:
class Card {
constructor() {
this.container = document.getElementById('main');
this.element = document.createE( 'div', {class: "card" } );
this.container.appendChild( this.element );
this.setImage();
}
setImage() {
//I do an instance of image in here
new Image()
}
}
И у меня есть еще один класс ниже под названием Изображение:
class Image {
constructor( image ) {
this.element = document.createE( 'img', { class: "image" } );
//then in here I expect to be able to access card.container to append child
// But it's here when I got the error main.js:25 Uncaught ReferenceError: Cannot
access 'card' before initialization
card.container.appendChild( this.element );
}
}
И я инициализирую классную карточку прямо в конце документа как:
let card = new Card()
Как я могу использовать свойства карты из изображения класса?
Комментарии:
1. ну как вы можете использовать что — то до того, как оно будет сделано?
2. Вы можете передать
Card
экземпляр вImage
конструктор в качестве параметра.3. this.image = this.setImage(); вы не присваиваете изображение свойству
4. Похоже, вы используете
new Image
перед инициализацией кодаcard
в конце документа, как говорится в сообщении об ошибке.5. (Примечание: В
Image
веб-среде уже есть функция по умолчанию, я бы, вероятно, избегал этого имени.)
Ответ №1:
Вы используете let
, который должен быть объявлен до того, как к нему будет получен доступ. Чтобы исправить ошибку, переместите let card = new Card()
ее в верхнюю часть документа.
Цитата из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#description:
Примечание. Многих проблем с
let
переменными можно избежать, объявив их в верхней части области, в которой они используются (это может повлиять на читаемость).