#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.jsthis.databaseStore = new DatabaseStore(this.cookieStore);
5. Вы можете использовать
=>
функцию es6 для сохранения области видимости, т.е.new Promise(()=>{...})