Wartością właściwości introduceSelf jest funkcja - dokładnie tak samo, jak wartością firstName jest tekst. Metoda to nic innego niż właściwość, której wartość da się wywołać nawiasami ().
MDN: Learn_web_development/Core/Scripting/Object_basics, sekcja „Object basics” („The last two items are functions that allow the object to do something with that data, and are referred to as the object's methods”)
Część 2 · Słowo this
this: metoda wskazuje z powrotem na swój obiekt
student.introduceSelf(); // wewnatrz metody: this === student
console.log(student.introduceSelf()); // Jestem Anna
Wewnątrz metody this zawsze wskazuje na obiekt, który tę metodę wywołał - tu na student. Dlatego this.firstName to to samo, co student.firstName, ale metoda działa dla każdego obiektu, który ją ma, bez wpisywania nazwy obiektu na sztywno.
MDN: Learn_web_development/Core/Scripting/Object_basics, sekcja „What is 'this'?” („The this keyword typically refers to the current object the code is being executed in. In the context of an object method, this refers to the object that the method was called on”)
Część 3 · Punkt zaczepienia z PHP
$this-> w PHP, this. w JavaScript
Ten sam pomysł co $this z kursu PHP (klasa Product): wewnątrz metody trzeba jakoś wskazać „mój własny obiekt”. PHP robi to strzałką $this->name, JavaScript zwykłą kropką this.name - bez znaku dolara, bez strzałki.
PHP Manual: „The pseudo-variable $this is available when a method is called from within an object context. $this is the value of the calling object” · php.net/manual/en/language.oop5.basic.php · MDN: Learn_web_development/Core/Scripting/Object_basics, sekcja „What is 'this'?” („this refers to the object that the method was called on”)
Część 4 · Wywołanie metody
metoda() uruchamia, metoda bez nawiasów - nie
console.log(student.introduceSelf()); // Jestem Anna - funkcja sie wykonala
console.log(student.introduceSelf); // [Function: introduceSelf] - sama definicja, NIE wywolana
W programowaniu obiektowym w języku JavaScript użyty w przedstawionym kodzie zapis this.profession oznacza
klasę.
metodę.
konstruktor.
właściwość.
2. W języku JavaScript zdefiniowano obiekt Car. Aby wywołać jedną z metod tego obiektu, należy zapisać
Car.()
Car.color
Car.fuelUsage()
Car.fuelUsagePer100
CKE, E.14, styczeń 2019, zadanie 34 · CKE, E.14, styczeń 2020, zadanie 32
Ćwiczenie przy komputerze · 20 minut
Ćwiczenie: metoda i this
Otwórz script.js z poprzedniej lekcji, z obiektem student (w folderze swojego projektu).
Dopisz do obiektu student metodę: introduceSelf: function() { return "Jestem " + this.firstName; }
Wywołaj metodę i wypisz wynik: console.log(student.introduceSelf());
Dla porównania wypisz też samą metodę, bez nawiasów: console.log(student.introduceSelf);
Dla chętnych w domu: zbuduj drugi obiekt z tą samą metodą introduceSelf i wywołaj ją.
Na koniec
Sprawdź się
Czym różni się metoda od zwykłej właściwości obiektu?
Co zwraca this wewnątrz metody wywołanej jako student.introduceSelf()?
Jaka jest różnica między student.introduceSelf() a student.introduceSelf (bez nawiasów)?
To tyle na dziś - temat obiektów zamknięty. Na następnej lekcji: własne funkcje w JavaScript.
Poza szkołą
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
introduceSelf: function() {...}
Skrót introduceSelf() {...}, bez słowa function
zastępowane
Zwykła funkcja jako metoda
W callbackach częściej strzałkowa () => {} - ale bez własnego this
tak robię w projektach
Metoda tylko jako student.introduceSelf()
„Wyjęta” z obiektu traci this - naprawia to bind()
tak robię w projektach
Jeden obiekt literałem {...}
Wiele podobnych obiektów - class Person {...}, jak PHP z kursu PHP
nadal w użyciu
Ciekawostka z MDN: skrócony zapis metody z tabeli wyżej (introduceSelf() {...} zamiast introduceSelf: function() {...}) nie jest nowością. Przeglądarki obsługują go od września 2015 roku, więc to dziś standardowy, sprawdzony zapis, nie eksperyment.
MDN: Learn_web_development/Core/Scripting/Object_basics, sekcja „Object basics” („Instead of bio: function () we can write bio()”, „From now on, we'll use this shorter syntax”)