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

Czy to poprawny kod obiektowy JavaScript?

VPS Starter Arubacloud
0 głosów
471 wizyt
pytanie zadane 31 sierpnia 2016 w JavaScript przez iozeke Obywatel (1,820 p.)

Cześć. Napisałem właśnie pierwszy kod obiektowy w języku JavaScript i chciałbym się Was zapytać, czy jest on napisany poprawnie (mam na myśli zastosowanie paradygmatu, a nie błędy kodu)

function Contractor(name, apartamentNumber, postalCode, city){
	this.name = name;
	this.apartamentNumber = apartamentNumber;
	this.postalCode = postalCode;
	this.city = city;
}
var adam = new Contractor("Adam X", 53, "42-200", "Sosnowiec");
var marek = new Contractor("Marek Y", 22, "12-500", "Warszawa");
function Package(sender, addressee){
	this.sender = sender;
	this.addressee = addressee;
}
var paczka1 = new Package(adam, marek);

Pozdrawiam :)

2 odpowiedzi

+1 głos
odpowiedź 1 września 2016 przez Death_Note Początkujący (440 p.)
Jeżeli myślisz o dziedziczeniu, to wykorzystując metodę paczka1 nie da się dojść do danch o sender i addressee. Nie zauważyłem, żeby tam zachodziła jakakolwiek hermetyzacja. Obiektowo nie programowałem  w javascript. Jeżeli masz tylko te dwa obiekty, to możesz połączyć je wewnętrznie. To tylko takie luźne dywagacje (wiem, że kod obiektowy powinien być rozszerzalny ).
komentarz 1 września 2016 przez Comandeer Guru (599,730 p.)

wykorzystując metodę paczka1 nie da się dojść do danch o sender i addressee

Jak się nie da? Pomijam fakt, że paczka1 jest instancją klasy Package

komentarz 1 września 2016 przez Death_Note Początkujący (440 p.)
Niczym matematyk mogę napisać udowodnij ;) W odpowiedzi pod spodem stworzył Pan dwie klasy nie połączone ze sobą w żaden sposób. Jeżeli pokazałby Pan na jego kodzie jak z paczka1 wywołać imię to byłbym zaszczycony, bo ja sobie tego nie wyobrażam, ale domniemam, że fatalnie się mylę.Przepraszam za błąd dotyczący instancji (pewnie z braku odpowiedniego słowa, które miałem w połowie języka, gdzieś na końcu mózgu). Pozdrawiam.
komentarz 1 września 2016 przez Comandeer Guru (599,730 p.)

W odpowiedzi pod spodem stworzył Pan dwie klasy nie połączone ze sobą w żaden sposób.

Uhm… Nie bardzo wiem, co rozumiesz pod "łączeniem klas"?

jak z paczka1 wywołać imię 

paczka1.sender.name;
// lub
paczka1.addressee.name;

 

komentarz 1 września 2016 przez Death_Note Początkujący (440 p.)
Coś wcześniej namieszałem w kodzie i wypisywało undefined. Dziękuję bardzo.
+1 głos
odpowiedź 1 września 2016 przez Comandeer Guru (599,730 p.)

Mamy ES6 i można ten kod spokojnie przepisać na klasy ;)

Za chwilę ktoś się pewnie doczepi, że adres można wsadzić do osobnej klasy (Address) i wsadzać ją przez DI do konstruktora Contractor.

class Contractor {
    constructor( name, address ) {
        this.name = name;
        this.address = address;
    }
}

class Address {
    constructor( street, city, postalCode) {
        this.street = street;
        this.city = city;
        this.postalCode = postalCode;
    }
}

const address = new Address( 'Testowa 11', 'Testowo', '00-000' );
const contractor = new Contractor( 'Test', address );

IMO przejrzyściej.

komentarz 1 września 2016 przez iozeke Obywatel (1,820 p.)
Wiem, że jest es6 i oczywiście niedługo się przerzucę, ale na początek chcę ogarnąć es5 :) dziękuję za wskazówki
komentarz 2 września 2016 przez jpacanowski VIP (101,940 p.)

To wszystko to tzw. „syntactic sugar” – pod spodem nadal odbywać się ma dziedziczenie prototypowe...

const contractor = new Contractor( 'Test', address );

A czemu const, a nie var ?

komentarz 2 września 2016 przez Comandeer Guru (599,730 p.)

To wszystko to tzw. „syntactic sugar” – pod spodem nadal odbywać się ma dziedziczenie prototypowe...

Owszem, ale nie można zapomnieć, że jedynie przez nową składnię da się uzyskać dziedziczenie po typach natywnych (jak Promise czy Array).

 

A czemu const, a nie var ?

Bo nie ma sensu w ES6 używać zmiennych z dziwacznych zasięgiem funkcyjnym jeśli można użyć zasięgu blokowego. No i obiektów przypisanych do zmiennych de facto nigdy nie nadpisuje się w całości, stąd const a nie let

komentarz 2 września 2016 przez iozeke Obywatel (1,820 p.)
Czyli okazuje się, że jeszcze niczego nie wiem. Byłbym wdzięczny za rekomendacje źródła nauki OOP w JS :) (może być anglojęzyczne, ale łatwiej będzie w j. polskim)
1
komentarz 2 września 2016 przez jpacanowski VIP (101,940 p.)

Podobne pytania

+1 głos
2 odpowiedzi 1,175 wizyt
0 głosów
2 odpowiedzi 188 wizyt
pytanie zadane 4 stycznia 2016 w C# przez kuba7528 Obywatel (1,320 p.)
+1 głos
1 odpowiedź 269 wizyt
pytanie zadane 18 stycznia 2022 w JavaScript przez gzwsky Nowicjusz (130 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...