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

Parametr obiektu iloczynem innego parametru

0 głosów
84 wizyt
pytanie zadane 5 dni temu w JavaScript, jQuery, AJAX przez wotaher Użytkownik (570 p.)

Przy uruchomieniu kodu:

	var object = {
	first: 5,
	second: this.first * 2
	}
	console.log(object.second);

Konsola wypisuje NaN. Dlaczego i jak to naprawić? Oczywiścię oczekuję że second przyjmie wartość 10. Szukałem rozwiązania w internecie ale niestety nie udało mi się znaleźć odpowiedzi.

3 odpowiedzi

+1 głos
odpowiedź 5 dni temu przez Tomasz Sochacki Stary wyjadacz (10,860 p.)
wybrane 5 dni temu przez wotaher
 
Najlepsza
var object = {
first: 5,
second: function () { return this.first * 2}
}
console.log(object.second()); //10

W takim rozwiązaniu this wskazuje na kontekst wywołania funkcji anonimowej, czyli właśnie obiekt object. Zwróć tylko uwagę, że w console.log wywołuję nie object.second tylko object.second() gdyż teraz jest to funkcja, zwracająca pożądany przez Ciebie wynik.

Przeanalizuj sobie dokładnie działanie tego kodu i poczytaj o wskaźniku this, żeby dobrze zrozumieć kiedy co oznacza. Czytaj jednak z nowych źródeł, gdyż nieco inaczej traktowane jest this w funkcjach "function () {}", a inaczej w arrow function.

+2 głosów
odpowiedź 5 dni temu przez Comandeer Mentor (354,540 p.)

Zawsze można zrobić getter:

var object = {
	first: 5,
	get second() {
		return this.first * 2;
	}
};

console.log(object.second);

 

komentarz 5 dni temu przez Tomasz Sochacki Stary wyjadacz (10,860 p.)
heh, i to chyba najlepsza z opcji, bo nie wymaga wywołania second jako funkcji z poziomu console.log... czasami zapomina się o prostych rozwiązaniach komplikując sobie życie (jak mój sposób z object.second()...
+1 głos
odpowiedź 5 dni temu przez Argeento Maniak (68,870 p.)

this nie wskazuje na object

this.first // undefined

undefined * 2 // NaN

komentarz 5 dni temu przez Argeento Maniak (68,870 p.)

Najprościej naprawić dodając nowe pole po stworzeniu obiektu

var object = {
    first: 5
}
object.second = object.first * 2

Podobne pytania

0 głosów
1 odpowiedź 66 wizyt
0 głosów
1 odpowiedź 84 wizyt
0 głosów
2 odpowiedzi 77 wizyt

36,094 zapytań

72,754 odpowiedzi

140,028 komentarzy

16,786 pasjonatów

Przeglądających: 189
Pasjonatów: 22 Gości: 167

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...