• 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 16 lipca w JavaScript, jQuery, AJAX przez wotaher Użytkownik (610 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ź 16 lipca przez Tomek Sochacki Pasjonat (15,060 p.)
wybrane 16 lipca 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ź 17 lipca przez Comandeer Mentor (364,980 p.)

Zawsze można zrobić getter:

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

console.log(object.second);

 

komentarz 17 lipca przez Tomek Sochacki Pasjonat (15,060 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ź 16 lipca przez argeento Maniak (73,310 p.)

this nie wskazuje na object

this.first // undefined

undefined * 2 // NaN

komentarz 16 lipca przez argeento Maniak (73,310 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ź 85 wizyt
0 głosów
2 odpowiedzi 78 wizyt
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,676 zapytań

76,595 odpowiedzi

149,654 komentarzy

18,085 pasjonatów

Przeglądających: 177
Pasjonatów: 6 Gości: 171

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.

...