Не удается получить доступ к свойству класса из другого класса

#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 переменными можно избежать, объявив их в верхней части области, в которой они используются (это может повлиять на читаемость).