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

Jaka jest różnica między zmienną, a właściwością obiektu?

Object Storage Arubacloud
+1 głos
877 wizyt
pytanie zadane 6 lutego 2018 w JavaScript przez Kamil M Bywalec (2,340 p.)

Cześć, ostatnio zacząłem naukę JavaScriptu i mam pytanie. Na początek prosta funkcja:

var myFunction = function(){
    var myValue1 = 15;
    var myValue2 = myValue1;
    return myValue2;
}

Wszystko działa ok, wartość myValue1 jest kopiowana i przypisywana do myValue2. Konsola w momencie wywołania funkcji zwraca wynik 15. Teraz podobna sytuacja w przypadku obiektu. Chcę przypisać jedną właściwość (zmienną?) do drugiej:

var myObject = {
	myValue1: 15, 
	myValue2: myValue1
}

W tym przypadku otrzymuję błąd na starcie - ReferenceError: myValue1 is not defined. Pomyślałem, że w momencie tworzenia obiektu myObject, myValue1 faktycznie nie istnieje, więc zrobiłem to samo konstruktorem obiektu:

var myObject = new Object();
myObject.myValue1 = 15;
myObject.myValue2 = myObject.myValue1;

Tutaj wszystko dzieje się po kolei, najpierw jest tworzona właściwość myValue1, a potem myValue2. Wszystko działa. Dlaczego w pierwszym przypadku nie zadziałało? Przecież "właściwość to zmienna w obiekcie", dlaczego w notacji literału nie zachowuje się jak zmienna lokalna? Dlaczego w funkcji, która podobno też jest obiektem coś takiego działa?

2 odpowiedzi

0 głosów
odpowiedź 6 lutego 2018 przez hoktaur Pasjonat (22,250 p.)
wybrane 6 lutego 2018 przez Kamil M
 
Najlepsza

Odpowiedź jest prosta i można by tu przytoczyć komunikat błędu myValue1 is not defined bo do takiej zmiennej się odwołujesz, ale jak już zrobisz tak:

var myValue1 = 1;

var myObject = {
	myValue1: 15, 
	myValue2: myValue1
}

to zmienna istnieje i całość zadziała ale nie o to ci chodziło, więc możesz spróbować tak:

var myObject = {
	myValue1: 15, 
	myValue2: this.myValue1
}

console.log(myObject);

ale dostaniesz w  odp: Object { myValue1: 15, myValue2: undefined }

rozwiązaniem jest skorzystanie z konstruktora:

function Klasa() {
	this.myValue1 = 15, 
	this.myValue2 = this.myValue1
}

var myObject = new Klasa();

console.log(myObject);

i teraz działa jak należy

komentarz 6 lutego 2018 przez hoktaur Pasjonat (22,250 p.)

Czysto naukowo można tak (ale nie rób tak nigdy ;) ):

var myObject = {
	myValue1: 15, 
	myValue2: myObject.myValue1
}

console.log(myObject);

 

komentarz 6 lutego 2018 przez Kamil M Bywalec (2,340 p.)

Super, dzięki! laugh

0 głosów
odpowiedź 6 lutego 2018 przez thryndl Nałogowiec (30,470 p.)
Zmienna w JS jest typem prostym, natomiast obiekt typem referencyjnym. Oznacza, że przypisując jedną zmienną do drugiej, jest tworzona jej kopia. Jeśli zmienisz wartość jednej zmiennej, to w drugiej pozostanie wartość nie zmieniona.

Natomiast w typach referencyjnych jest tworzony adres, prowadzący do obiektu. Jeśli usuniemy wszystkie adresy, obiekt zostanie usunięty z pamięci.

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
0 głosów
1 odpowiedź 329 wizyt
pytanie zadane 29 listopada 2018 w C i C++ przez ciocialol Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 611 wizyt
pytanie zadane 12 czerwca 2018 w C i C++ przez Agnes Użytkownik (990 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...