Przejdź do głównej treści

Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji

Zawód: Technik programista

Kategorie: Programowanie Testowanie i debugowanie

Co zostanie wyświetlone po wykonaniu poniższego kodu?

function Person(name) {
  this.name = name;
}

Person.prototype.sayHello = function() {
  return `Hello, ${this.name}!`;
};

const person = new Person('John');
console.log(person.sayHello());
A. Hello, John!
B. Hello, undefined!
C. Hello, [object Object]!
D. TypeError: person.sayHello is not a function
Wynik działania podanego kodu to 'Hello, John!'. Dzieje się tak, ponieważ tworzony jest obiekt 'person' z konstruktora 'Person', który przypisuje wartość 'John' do właściwości 'name'. Metoda 'sayHello' zdefiniowana w prototypie klasy 'Person' wykorzystuje szablon literowy (template literal), aby zwrócić powitanie, wstawiając wartość 'name' obiektu. To podejście jest zgodne z dobrymi praktykami programowania w JavaScript, ponieważ wykorzystuje prototypy do dzielenia się metodami pomiędzy instancjami obiektów. W praktyce, takie rozwiązania pozwalają na oszczędność pamięci i zwiększają wydajność, gdyż wszystkie instancje korzystają z tej samej metody, a nie mają osobnych kopii. Przykładowo, jeśli chcielibyśmy dodać więcej osób, wystarczy utworzyć nowe instancje 'Person' bez konieczności powielania kodu metody 'sayHello'.
Pierwsza z niepoprawnych odpowiedzi sugeruje, że wynik to 'Hello, undefined!'. To wynika z błędnego założenia, że właściwość 'name' nie jest prawidłowo przypisana do obiektu. W kodzie właściwość 'name' jest poprawnie ustawiona przez konstruktor, więc nie ma podstaw do uznania, że zwróci 'undefined'. Warto zauważyć, że 'undefined' pojawia się, gdy zmienne nie zostały zainicjowane lub gdy nie odnajdujemy właściwości w obiekcie. Z kolei opcja, która wskazuje na 'TypeError: person.sayHello is not a function', jest oparta na błędnym założeniu, że metoda 'sayHello' nie istnieje w obiekcie 'person'. Metoda ta została zdefiniowana w prototypie, więc każda instancja obiektu 'Person' ma do niej dostęp i nie spowoduje to błędu typu. Ostatnia z odpowiedzi, sugerująca, że wynik to 'Hello, [object Object]!', jest efektem niepoprawnego użycia konwersji obiektu do stringa. Gdybyśmy próbowali zwrócić 'this' jako obiekt bez odpowiedniego przetworzenia, zwróciłoby to domyślną reprezentację obiektu. Kluczowym błędem w myśleniu jest nieuwzględnienie, że metody są częścią prototypów i obiekty dziedziczą je, co jest fundamentalnym założeniem obiektowego paradygmatu programowania w JavaScript. Warto zwrócić uwagę na te koncepcje, aby lepiej zrozumieć działanie prototypów w tym języku.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.