Instrukcja x = przedmiot.nazwa(); w JavaScripcie oznacza wywołanie metody nazwa na obiekcie przedmiot, a do zmiennej x zostaje podstawiony zwrócony wynik. Kluczowe są tu dwa elementy: kropka oraz nawiasy okrągłe. Zapis przedmiot.nazwa bez nawiasów odnosiłby się tylko do samej funkcji (referencji do metody), natomiast dodanie () powoduje jej wykonanie i dopiero rezultat tego wywołania trafia do zmiennej. W praktyce wygląda to tak: jeśli obiekt przedmiot ma zdefiniowaną metodę nazwa, np. const przedmiot = { nazwa() { return "Monitor"; } }; to po instrukcji x = przedmiot.nazwa(); zmienna x będzie równa tekstowi "Monitor". To jest bardzo typowy wzorzec: obiekt.metoda() zwraca jakąś wartość (string, liczbę, obiekt, tablicę, czasem też undefined), a my ją przechwytujemy do zmiennej, żeby dalej z nią pracować. W dobrych praktykach programistycznych rozdziela się metody, które coś zwracają (tzw. query) od metod, które tylko wykonują akcję (np. zmieniają stan obiektu, ale nic nie zwracają). W tym pytaniu zakładamy, że nazwa zwraca wartość, więc przypisanie do x ma sens. Moim zdaniem warto od początku wyrabiać nawyk czytania takiego kodu: po lewej zmienna, po prawej wyrażenie, które jest obliczane. Najpierw wykonywana jest metoda nazwa(), a dopiero potem wynik trafia do x. Taki schemat pojawia się non stop w realnych projektach frontendowych i backendowych w JS, np. const wynik = koszyk.policzSume(); albo const tytul = dokument.getElementById("id").textContent; – w obu przypadkach zmienna przechowuje rezultat działania metody.
Wyrażenie x = przedmiot.nazwa(); w JavaScripcie dość często bywa mylnie interpretowane, bo miesza się pojęcia atrybutów, cech obiektu i metod. W składni obiektowej JavaScript zapis przedmiot.nazwa oznacza odwołanie się do własności o nazwie nazwa, należącej do obiektu przedmiot. Jeśli do tej własności przypisana jest funkcja, to mówimy o metodzie obiektu. Dopiero nawiasy okrągłe () po nazwie powodują wywołanie tej funkcji. To jest istotna różnica: sama kropka nie uruchamia żadnego kodu, tylko daje dostęp do pola lub metody. Stwierdzenie, że nazwa jest atrybutem klasy przedmiot, wprowadza w błąd z dwóch powodów. Po pierwsze, w klasycznym JavaScripcie pracujemy głównie na obiektach, a nie na „klasach” w sensie znanym z Javy czy C#. Słowo „class” pojawiło się w nowszej składni, ale nadal pod spodem działają prototypy. Po drugie, w kodzie z pytania mamy konkretny obiekt przedmiot, a nie definicję klasy, więc mówienie o „atrybucie klasy” jest tutaj nietrafione. Bardziej poprawnie jest mówić o własności obiektu albo metodzie obiektu. Druga mylna interpretacja to traktowanie nazwa jako „cechy” obiektu przedmiot. Gdyby to była zwykła cecha (np. tekst), zapis wyglądałby raczej tak: x = przedmiot.nazwa; bez nawiasów. Wtedy x dostałby wartość właściwości, np. string. Dodanie () jasno sugeruje, że nazwa jest funkcją, czyli metodą, a nie prostym polem danych. To jest częsty błąd: nieuwaga na nawiasy prowadzi do złego zrozumienia, co dokładnie robi kod. Równie mylące jest zdanie, że zmienna x będzie przechowywać wynik działania funkcji przedmiot. W tym zapisie przedmiot nie jest funkcją, tylko obiektem, na którym wywołujemy metodę nazwa(). Gdyby przedmiot był funkcją, wywołanie wyglądałoby przedmiot(), a nie przedmiot.nazwa(). Z mojego doświadczenia wynika, że uczniowie mieszają obiekty z funkcjami, bo w JS funkcja też jest typem danych i można ją przypisać do zmiennej. Dlatego warto mocno utrwalić: obiekt.metoda() – wywołujesz metodę obiektu, funkcja() – wywołujesz funkcję przypisaną bezpośrednio do zmiennej. Podsumowując, poprawne rozumienie tego zapisu opiera się na zauważeniu dwóch rzeczy: przedmiot jest obiektem, nazwa jest metodą tego obiektu, a nawiasy oznaczają wywołanie metody, której wynik dopiero jest przypisywany do x. Pomyłki wynikają zwykle z ignorowania nawiasów lub z nieodróżniania własności (pól) od metod, co jest podstawą programowania obiektowego w JavaScripcie.