Модули Webpack ES6 для организации приложений нескольких классов

#javascript #class #webpack #es6-modules #es6-class

#javascript #класс #webpack #es6-модули #es6-класс

Вопрос:

Я впервые создаю приложение с помощью webpack и пытаюсь разобраться в организации файлов классов. У меня возникли проблемы с получением кода для работы. Я все еще новичок в ES6 и тому подобном, поэтому мой приведенный ниже код, вероятно, очень неправильный, но я не уверен, что это мой подход / концепция или мой синтаксис.

запись есть index.js , и у меня также есть эти файлы

 import App from './js/app.js';
import User from './js/user.js';
import Guest from './js/guest.js';

const app = new App();
const user = new User();
const guest = new Guest();

$(document).ready(function () {
    app.DatabaseStore.senddata();
    console.log( user.getall() );
});
  

src/js/app.js основной глобальный метод / переменный класс

 import CookieStore from './cookie.js';
import DatabaseStore from './database.js';

export default class App {
    constructor() {
        this.cookieStore = new CookieStore();
        this.databaseStore = new DatabaseStore();
    }
    gettime() {
        return 'time';
    }
}
  

src/js/user.js методы, предназначенные для users

 import App from './app.js';

export default class User extends App {
    constructor() {
        this.mydata = App.cookieStore.getData();
        console.log(this.mydata );
    }
    getall() {
        return ['foo', 'bar', 'baz'];
    }
}
  

src/js/guest.js методы, предназначенные для guests

 import App from './app.js';

export default class Guest extends App {
    constructor() {
        this.mydata = App.cookieStore.getData();
    }
}
  

src/js/cookie.js методы обработки файлов cookie

 export default class CookieStore {
    constructor() {}
    mydata() {return 'foo';}
}
  

src/js/database.js методы firebase

 export default class DatabaseStore {
    constructor() {}
    senddata() {
        this.mydata = App.cookieStore.getData();
    }
  

Комментарии:

1. В чем именно проблема?

2. например, вызов App.cookieStore.getData() в User классе приводит к тому, что метод не найден.

Ответ №1:

Вы пытаетесь получить доступ к свойству экземпляра статически. Вам необходимо создать экземпляр App class, прежде чем пытаться получить доступ cookieStore к свойству. Вы можете создать экземпляр и экспортировать его в свой app.js иметь одноэлементный экземпляр.

 //in your app.js 
export const app = new  App();
  

в других файлах

 import {app} from './js/app.js'

app.cookieStore.getData();
  

Комментарии:

1. Это идеально, казалось, исправило guest.js и user.js . Однако, когда я добавляю import {app} from './js/app.js' index.js , я не могу получить доступ app.databaseStore.senddata()

2. Вы написали app.DatabaseStore.senddata(); вместо app.databaseStore.senddata();

3. Проверьте эти строки ` $(document). готово(function () { app.DatabaseStore.senddata(); console.log( user.getall()); });`

4. В вашем конструкторе базы данных в database.js , сделайте CookieStore зависимостью constructor(cookieStore){ this.cookieStore = cookieStore; , а затем в вашем app.js this.databaseStore = new DatabaseStore(this.cookieStore);

5. Вы можете использовать => функцию es6 для сохранения области видимости, т.е. new Promise(()=>{...})