INF.04 · pytanie 337
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());
- AHello, undefined!
- BHello, [object Object]!
- CHello, John!Poprawna
- DTypeError: person.sayHello is not a function
Wyjaśnienie
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'.