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

Funkcja nie odczytuje zmiennych globalnych

Object Storage Arubacloud
+1 głos
210 wizyt
pytanie zadane 19 lutego 2023 w JavaScript przez Piotrek2713 Mądrala (5,340 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 (154,780 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 (252,740 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,340 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 (252,740 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,340 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 (269,710 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,340 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 336 wizyt
pytanie zadane 30 marca 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)
0 głosów
0 odpowiedzi 606 wizyt
pytanie zadane 17 kwietnia 2019 w C# przez WojMen Początkujący (330 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...