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

Parametr obiektu iloczynem innego parametru

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
85 wizyt
pytanie zadane 16 lipca 2017 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 2017 przez Tomek Sochacki Nałogowiec (29,630 p.)
wybrane 16 lipca 2017 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 2017 przez Comandeer Mentor (385,470 p.)

Zawsze można zrobić getter:

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

console.log(object.second);

 

komentarz 17 lipca 2017 przez Tomek Sochacki Nałogowiec (29,630 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 2017 przez argeento Szeryf (78,710 p.)

this nie wskazuje na object

this.first // undefined

undefined * 2 // NaN

komentarz 16 lipca 2017 przez argeento Szeryf (78,710 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ź 67 wizyt
0 głosów
1 odpowiedź 86 wizyt
0 głosów
2 odpowiedzi 81 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.
Ciekawy innych porad? Odwiedź tę stronę!

44,148 zapytań

83,934 odpowiedzi

167,083 komentarzy

21,106 pasjonatów

Przeglądających: 198
Pasjonatów: 10 Gości: 188

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.

...