Tworzenie obiektów i nazwy podane w argumencie funkcji.

0

Heloł, czy jest możliwe tworzenie obiektów na podstawie konstruktora klasy X ale poprzez wywołanie metody w klasie Y tak żeby przekazać jakieś argumenty jako nazwę obiektu?
Rozbiję pytanie na segmenty:

  1. Czy da się przekazać string lub zmienną jako nazwę obiektu przy jego tworzeniu? (np. let x = new Dupa(); gdzie x jest jakimś stringiem który pobieramy z inputa. Da się t jakoś podstawić? czy wszystkie deklaracje muszą być sztywno deklarowane.).
  2. Jeśli tworzycie projekt prostego sklepu internetowego to czy przy dodawaniu produktów korzystacie z klas i obiektów (tworzycie nowy obiekt po kliknięciu)? czy może jest jakaś inna alternatywa która lepiej się spisuje.
  3. Czy jeśli odpowiedź na pytanie nr 2 brzmi tak to czy dobrą praktyką jest grupowanie produktów (obiektów) w tablice i kolejne obiekty i tablice itd. z podziałem na kategorie.
  4. Jak rozwiązuje się takie zagadnienie profesjonalnie? Aplikacje jak np. Allegro.
0

(np. let x = new Dupa(); gdzie x jest jakimś stringiem który pobieramy z inputa. Da się t jakoś podstawić?

No normalnie dajesz argumenty w nawiasach np. new Dupa("gowno") albo new Dupa(e.target.value) czy cokolwiek.

Jeśli tworzycie projekt prostego sklepu internetowego to czy przy dodawaniu produktów korzystacie z klas i obiektów (tworzycie nowy obiekt po kliknięciu)?
czy może jest jakaś inna alternatywa która lepiej się spisuje.

Od obiektów się nie ucieknie w JavaScript. Co najwyżej z klas można zrezygnować, jak ktoś nie lubi/nie potrzebuje.

Czy jeśli odpowiedź na pytanie nr 2 brzmi tak to czy dobrą praktyką jest grupowanie produktów (obiektów)
w tablice i kolejne obiekty i tablice itd. z podziałem na kategorie.

To zależy. Tablice są normalną częścią języka, więc też czasem warto ich użyć. Może lepiej po prostu najpierw poucz się trochę o funkcjach, obiektach, tablicach, klasach, bo to wygląda jakbyś porywał się na zrobienie sklepu internetowego w JS bez znajomości podstaw tego języka.

0

Dupa dupa, nie zrozumiałeś o co mi chodzi :d ale dziękuję bardzo za odpowiedź tak czy siak.

0
  1. Można tak
var anObjectName = "myObject";
this[anObjectName] = "myvalue"

console.log(myObject)
0

Tutaj z pomocą mogą przyjść fabryki. W fabryce rejestrujesz sobie klucze które mogą być stringami, oraz konstruktory interesujących Cię klas. Oto przykład takiej prostej fabryki (niech już będzie przykład z dupą :P):

class DupaFactory {
    
    constructor() {
        this.registeredConstructors = {};
    }
    
    // Aby mozliwe bylo tworzenie instancji za pomoca klucza (string), 
    // musimy zarejestrowac taka klase, aby fabryka wiedziala o jej istnieniu
    register(key, classConstructor) {
        this.registeredConstructors[key] = classConstructor;
    }

    // Ta metoda pozwoli nam utowrzyc instancje bazujac na kluczu
    getInstance(key, params = undefined) {
        if(this.registeredConstructors[key]) {
            const classConstructor = this.registeredConstructors[key];
            return new classConstructor(params);
        }
    }
}

// Stworzmy kilka klas dla przykladu

class MalaDupa {
    getSize() {
        return `Dupeczka`;
    }
}

class SredniaDupa {

    // A ta klasa niech przyjmuje dodatkowy argument
    constructor(wyglad) {
        this.wyglad = wyglad;
    }

    getSize() {
        return `Dupa ${this.wyglad}`;
    }
}

class DuzaDupa {
    getSize() {
        return `Dupsko`;
    }
}

const myFactory = new DupaFactory();
myFactory.register('mala', MalaDupa);
myFactory.register('srednia', SredniaDupa);
myFactory.register('duza', DuzaDupa);

const rozmiarMojejDupy = 'duza'; // Jak widzisz to jest dowolny string
const mojaDupa = myFactory.getInstance(rozmiarMojejDupy);
console.log(mojaDupa.getSize()); // Dupsko

const rozmiarCudzejDupy = 'srednia';
const cudzaDupa = myFactory.getInstance(rozmiarCudzejDupy, 'ladna'); // Jak widzisz, mozesz przekazac parametry do metody getInstance
console.log(mojaDupa.getSize()); // Dupa ladna

const rozmiarNieistniejacejDupy = 'ogromna';
const nieistniejacaDupa = myFactory.getInstance(rozmiarNieistniejacejDupy); // Undefined
console.log(nieistniejacaDupa.getSize()); // Exception!

1 użytkowników online, w tym zalogowanych: 0, gości: 1