• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja nie odczytuje zmiennych globalnych

Mały hosting, OGROMNE możliwości
+1 głos
613 wizyt
pytanie zadane 19 lutego 2023 w JavaScript przez Piotrek2713 Mądrala (5,520 p.)

Mój kod js

class Information
{
    constructor(h1, p)
    {
        this.h1 = h1;
        this.p = p;
    }
}

let info1 = new Information("Pierwsze info", "Opis pierwszego info");
let info2 = new Information("Drugie info", "Opis Drugiego info");

//document.getElementById('heading').innerHTML=info1.h1;
//document.getElementById('paragraph').innerHTML=info1.p;

function displayInfo()
{
    const heading = document.getElementById('heading');
    const paragraph = document.getElementById('paragraph');

    let infoNumber = 1;
    let info = "info"+infoNumber;

    heading.innerHTML = info.h1;
    paragraph.innerHTML = info.p;
}

window.onload = displayInfo;

Testując funkcję chciałem wyświetlić obiekty klasy information ze zmiennej info1

Sprawdziłem czy klasa działa i czy zmienne są prawidłowo zadeklarowane. Wszystko działa.

    let infoNumber = 1;
    let info = "info"+infoNumber;

zmienna info jest równa info1

    const heading = document.getElementById('heading');
    const paragraph = document.getElementById('paragraph');
    heading.innerHTML = info.h1;
    paragraph.innerHTML = info.p;

Przy próbie wyświetlenia zawartości klasy ze zmiennej info 1 wyświetla się Undefined

Co zrobić aby zmienne były zdefiniowane w funkcji?

Przeniesienie zmiennych do funckji skutkuje podobnie

3 odpowiedzi

+1 głos
odpowiedź 19 lutego 2023 przez tangarr Mędrzec (155,140 p.)
wybrane 22 lutego 2023 przez Piotrek2713
 
Najlepsza

Przeczytałem kilka razy i nie mogłem zrozumieć o co chodzi autorowi, aż w końcu mnie olśniło.
Kolega chce odczytywać zmienne globalne przy pomocy wygenerowanych identyfikatorów.
Zmienne globalne znajdują się w obiekcie window

Przetestuj kod:

var info1 = new Information("Pierwsze info", "Opis pierwszego info");
let infoNumber = 1;
let info = window[ "info"+infoNumber ];

Ważne, aby zmienna info1 została zadeklarowana przy pomocy słowa kluczowego var a nie let

0 głosów
odpowiedź 19 lutego 2023 przez VBService Ekspert (256,580 p.)
edycja 19 lutego 2023 przez VBService

W Twoim kodzie nie odwołujesz się do zmiennych, do których przypisujesz klasę Information

let info1 = new Information("Pierwsze info", "Opis pierwszego info");
let info2 = new Information("Drugie info", "Opis Drugiego info");

 zamiast

    heading.innerHTML = info.h1;
    paragraph.innerHTML = info.p;

np. zapisz

    heading.innerHTML = info1.h1;
    paragraph.innerHTML = info1.p;

 

 

sprawdź on-line

class Information
{
    constructor(h1, p)
    {
        this.h1 = h1;
        this.p = p;
    }
}
 
const info1 = new Information("Pierwsze info", "Opis pierwszego info");
const info2 = new Information("Drugie info", "Opis Drugiego info");
 
function displayInfo()
{
    const heading = document.getElementById('heading');
    const paragraph = document.getElementById('paragraph');
 
    let infoNumber = 1;
    let info = "info" + infoNumber;
 
    heading.innerHTML = info1.h1;
    paragraph.innerHTML = info1.p + ' ' + info;
}
 
window.onload = displayInfo;

 

komentarz 19 lutego 2023 przez Piotrek2713 Mądrala (5,520 p.)

W Twoim kodzie nie odwołujesz się do zmiennych, do których przypisujesz klasę Information

Rozumiem, ale ja chcę przechować tę liczbę 1 w innej zmiennej (infoNubmer), żeby później funkcja miała możliwość zmiany tej liczby na dwa, potem trzy itd. aby otrzymać info1, info2, info3 itd. Na razie jeszcze tego nie okodowałem, chciałem tylko sprawdzić jak zadziała, gdy infoNubmer jest równe 1, aby zmienna info miała wartość info1.

komentarz 19 lutego 2023 przez VBService Ekspert (256,580 p.)
edycja 19 lutego 2023 przez VBService

To chyba Tobie chodzi o to co opisał @tangarr;

var info1 = new Information("Pierwsze info", "Opis pierwszego info");
let infoNumber = 1;
let info = window[ "info"+infoNumber ];

to jako ciekawostkę, że można zapisać i tak np.

const info1 = new Information("Pierwsze info", "Opis pierwszego info");
let infoNumber = 1;
let info = eval(`info${infoNumber}`);

 

komentarz 22 lutego 2023 przez Piotrek2713 Mądrala (5,520 p.)

To chyba Tobie chodzi o to co opisał @tangarr

Dokładnie o to chodziło 

0 głosów
odpowiedź 19 lutego 2023 przez Wiciorny Ekspert (283,260 p.)

A próbowałeś "var"?
https://sentry.io/answers/difference-between-let-and-var-in-javascript/

btw. nie kumam co tu się dzieje, gdyż twoj obiekt info, jest lokalny i nie jest obiektem typu Klasy
 

    let info = "info"+infoNumber;
 
    heading.innerHTML = info.h1;
    paragraph.innerHTML = info.p;

 

komentarz 19 lutego 2023 przez Piotrek2713 Mądrala (5,520 p.)

btw. nie kumam co tu się dzieje, gdyż twoj obiekt info, jest lokalny i nie jest obiektem typu Klasy

zmienna info ma przechowywać kolejno wartości info1, info2, info3 (Po doklejeniu zmiennej infoNumber) i ta wartość ma być wykorzystana do funkcji innerHTML, aby wyświetliła się wartość ze zmiennej info1 (I potem kolejnych info2, info3 gdy okoduję konkatenację zmiennej infoNumber) 

Podobne pytania

0 głosów
3 odpowiedzi 571 wizyt
pytanie zadane 30 marca 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)
0 głosów
0 odpowiedzi 865 wizyt
pytanie zadane 17 kwietnia 2019 w C# przez WojMen Początkujący (330 p.)

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...