OOP és öröklődés javascript - Popel iroda
Osztályok? Nem, nem hallottam
A fenti kód megadja az objektum neve myCar és módszerek dudál () és a hajtás ().
De mi van, ha kell létrehozni 30 tárgyat? Hogyan kerüljük el a létrehozását módszert minden egyes tárgy kézzel? A valós világban, különleges intézkedéseket alkalmaznak a tömeggyártás minden dolog. Hasonlóképpen, a dolgok és a nyelvek az osztály modell, melynek létrehozásával egy osztály, akkor azonnal kap a mechanizmus létrehozására tárgyak ez alapján:
A legegyszerűbb lehetőség - írj egy egyszerű funkció, amely bélyegző tárgyakat azonos tulajdonságok és módszerek. Ezek a tárgyak nem kapcsolható.
Egy másik lehetőség - írja a speciális funkciót, amely nem csak új objektumok létrehozásához, hanem csatlakozni őket egymáshoz. Minden ilyen lehetőségek állnak rendelkezésre olyan módszereket alkalmaz. Ha később úgy dönt, hogy változtatni, például egy új módszer, ez a módszer nem csak a jövőben lehetőség, hanem az összes már létre.
Nézzük meg a két lehetőséget részletesebben.
Objektumok létrehozása révén egy egyszerű függvény
Az első példában létrehoztunk myCar objektumot, és hozzáteszi, hogy ez néhány módszer. Helyezze ezt a kódot egy funkciót:
Most már tudjuk használni ezt a funkciót a sajtolás létesítmények:
Ezen felül, a létesítmények nem kapcsolódnak egymáshoz. Ez a helyzet nagyon hasonlít a valódi autók valódi autó: mindannyian ugyanúgy néz ki, de amint elhagyják a futószalagról, ezek teljesen függetlenek egymástól. Ha a közepén a termelési modell a hiba felfedezése az ő eltávolítása a gyártó vissza kell térnie az összes autó vissza a autógyár.
De a virtuális világban, akkor nem kell korlátoznia magát ezen a módon. Mi is létrehozhatunk tárgyakat oly módon, hogy képes legyen megváltoztatni őket egyszerre.
Objektumok létrehozásához használja a kivitelező
Először is a döntés, hogy ismételje meg egy egyszerű függvény, amely kannákban független objektumok, de formájában kivitelező:
Most ezt a funkciót, az új üzemben. nevezetesen:
Az új üzemeltető létrehoz egy új objektumot, és felhívja a konstruktor függvényt, mint a módszer, hogy a tárgy (azaz, utalva a tárgy a változó ezt), majd visszatér a létrehozott objektumot. Egyszerűsíti a munkát az új üzemeltető lehet illusztrálja a következő pszeudo-kód:
Amint azt már említettük, a tervező megismétli a megoldás egy egyszerű funkció. Nem kell, hogy hozzon létre tárgyak kézzel, de még mindig nem tudja megváltoztatni a dudálás () metódus egy időben az összes létrehozott objektumok. De mi már az alapjait. Minden tárgy által létrehozott tervező, kap egy speciális tulajdonsága, amely összeköti őket a tervező:
Minden teremtett myCar kapcsolódóan a Car kivitelező. Ez az, ami megkülönbözteti őket a véletlenszerű halmaza tárgyakat azonos módszerekkel és hasonló nevek.
Most itt az ideje, hogy beszéljünk prototípusok, amit korábban említettem ebben a cikkben.
Egy prototípus objektumok létrehozásához közös funkcionális
Mint írtam egy prototípus programozási technikák, amelyek közösek az összes tárgyat, hogy kerülnek az objektum prototípus. De hol van a prototípus célja a mi létesítmények myCar. mert nem hozott létre? Ő hallgatólagosan teremtett számunkra, és rögzítjük Car.prototype tulajdon.
Azt is egy meglévő módszer a következő:
Azt is megváltoztathatja a módszer csak egy a lehetőségek:
Az utolsó példában, fontos, hogy megértsük, mi történik a színfalak mögött. Mint már tudjuk, a hívás idejére a tolmács halad egy bizonyos módon, hogy elvégezzük ezt a módszert. Egy tárgy myCar1 még nincs meghatározásának módszere dudál () metódus és a héj végrehajtja a prototípus objektumot. De abban az esetben myCar2 minden más, most már a saját dudál () metódust. így az értelmező nem vonatkozik ez a módszer egy prototípus.
Figyeljük meg, hogy sokkal hatékonyabb felhasználása a prototípus, mint a teremtés példányban módszerekkel. Mint már említettük, a tolmács nem világos, hogy ezek a módszerek azonosnak kell lennie, így memóriát minden módszer minden objektum általunk készített. De abban az esetben a prototípus különböző - a memóriát csak egyszer nem számít, hány tárgyat hozunk létre.
Nem megalapozatlan, adok egy nagyon egyszerű összehasonlítást. Az első példa egy millió objektumot, és mindegyik ad egy példányát egyetlen módszer:
A Google Chrome, a terület a memória 328 MB méretű. De ugyanaz a példa, de a módszer át a prototípus:
Ebben az időben, a memória terület mérete 17 MB, ami körülbelül 5% -kal az előző értéket.
öröklés
Kétségtelen, hogy kényelmesebb egy osztály tárgyak megosztó módszerek, de gyakran kell hozzon létre egy sor különböző osztályainak tárgyak néhány gyakori funkciót. Képzeld el, hogy ott nem csak autók, de biciklit csodálatos virtuális világ. És mindketten tudjuk, hogyan kell lovagolni, hanem van egy kürt kerékpár csengő.
Így az eljárás a meghajtó () - a teljes mindkét osztályok, míg a dudál () módszerek és a gyűrű () mindegyikét az osztályába. Mi kiválasztjuk az osztály jármű. ahonnan aztán örökli osztályok autó és kerékpár.
Scheme osztályhierarchia- A tolmács keres egy módszert meghajtó () az objektum myCar. Ez a módszer az objektum nem létezik;
- A tolmács keres egy módszert meghajtó () a prototípus autó kivitelező. amelynek ez a létrehozott objektum az autós Design. Szintén nincs módszer;
- A tolmács keres egy módszert meghajtó () prototípus jármű Design. hol van a kívánt eljárással.
Osztályok? Nem, nem hallottam. 2. rész
Lássuk, mi történik. Nézzünk egy példát:
Ez a kód amely szinte ugyanazt az eredményt, mint a létrehozását tervezők, de sokkal rövidebb. Backstage módszer Object.create () létrehoz egy ideiglenes kivitelező, mint egy prototípus, amely felhasználja átadott objektumot nekünk. Miután ez a módszer visszaadja egy objektum, amely által létrehozott ideiglenes kivitelező.
De várjunk csak egy percet, mi is létre módszereket meghajtó () és a dudálás () közvetlenül a tárgyak maguk helyett a prototípusok, kivéve, hogy nem vezet növekedését memória-felhasználás? Ebben az esetben - nem. Hoztunk létre négy különböző tárgyakat, melyek közül kettő - a tárgyak myCar. alapján létrejött az autó objektumot. De míg maguk a módszerek dudál () és a hajtás () meghatározása csak egyszer, és ennek következtében a memóriában, akkor már csak egyszer. A kísérlet:
Kiderült, hogy a méret a lefoglalt memória még nagyobb - akár 40 MB. De cserébe kód egyszerűsítés megengedett feláldozni.