Domovská » Kódování » Objektově orientovaný JavaScript (OOJS) 3 způsoby vytváření instancí objektů

    Objektově orientovaný JavaScript (OOJS) 3 způsoby vytváření instancí objektů

    Když je programovací jazyk vše o objektech, první věc, kterou se musíme naučit, je jak vytvářet objekty. Vytváření objektů v JavaScriptu je poměrně snadné: pár složených závorek to bude dělat ani jediný způsob vytvořit objekt ani jediný způsob budete muset použít.

    V JavaScriptu jsou instance objektů vytvořené z vestavěných objektů existenci, když program běží. Například, datum je vestavěný objekt, který nám poskytuje informace o datech. Pokud chceme na stránce ukázat aktuální datum, my potřebovat runtime instanci datum informace o aktuálním datu.

    JavaScript nám také umožňuje definovat naše vlastní objekty které mohou vytvářet vlastní instance objektů v běhu. V JavaScriptu, všechno je objekt a každý objekt má konečný předek volal Objekt. Zavolá se vytvoření instance objektu konkretizace.

    1. Nový operátor

    Jedna z nejběžnějších a nejznámějších metod pro vytvoření nové instance objektu je za použití Nový operátor.

    Potřebuješ konstruktor udělat Nový práce operátora. Konstruktor je metoda objektu, který spojuje a nové instance tohoto objektu. Jeho základní syntaxe vypadá takto:

     nový konstruktor () 

    Konstruktor může přijmout argumenty které lze použít ke změně nebo přidání vlastností k instanci objektu, kterou vytvoří. Konstruktor má stejný název patří objekt.

    Zde je příklad, jak vytvořit instanci Datum() objekt s Nový klíčové slovo:

     dt = new Datum (2017, 0, 1) console.log (dt) // Ne Jan 01 2017 2017: 00:00:00 GMT + 0100 

    Datum() je konstruktor vytvořit nový datum objekt. Různé konstruktory pro objekt přijmout různé argumenty vytvořit stejný druh instancí objektu pomocí rozmanité atributy.

    Ne všechny vestavěné objekty v JavaScriptu mohou být instancovány jako datum. Tam jsou objekty, které Nepřiďte s konstruktorem: Matematika, JSON a Odraz, ale jsou to stále obyčejné předměty.

    Mezi vestavěné objekty, které mají konstruktor (y), Symbol nelze volat ve stylu konstruktoru vytvořit instanci nového Symbol instance. Může to být jen volání jako funkce který vrací nový Symbol hodnota.

    Také mezi vestavěnými objekty, které mají konstruktor (y), ne všichni potřebují, aby jejich konstruktéři byli voláni pomocí Nový operátora, aby mohl být vytvořen. Funkce, Array, Chyba, a RegExp lze také nazývat jako funkce, bez použití Nový klíčové slovo, a vytvoří instanci a vrátí novou instanci objektu.

    2. Odraz objekt

    Programátoři backendu už možná znají Reflexní API. Odraz je funkcí programovacích jazyků kontrolovat a aktualizovat některé základní subjekty, například objekty a třídy, za běhu.

    V JavaScriptu můžete již provádět nějaký reflexní operace pomocí Objekt. Ale, a správného Reflection API nakonec také existoval v JavaScriptu.

    Odraz objekt má sadu metod vytvořit a aktualizovat instance objektů. Odraz objekt nemá konstruktor, tak to nemůže být instalováno s Nový operátora a podobně Matematika a JSON, to nelze volat jako funkci buď.

    nicméně, Odrazekvivalentní Nový operátor: Reflect.construct () metoda.

     Reflect.construct (cíl, argumentsList [, nový cíl]) 

    Oba cílová a volitelné newTarget argumenty jsou objekty, které mají své vlastní konstruktéry, zatímco argumentsList je seznam argumentů být předán konstruktérovi cílová.

     var dt = Reflect.construct (Datum, [2017, 0, 1]); console.log (dt); // Ne Jan 01 2017 00:00:00 GMT + 0100 

    Výše uvedený kód má stejný účinek jako konkretizace Datum() za použití Nový operátor. I když můžete stále používat Nový, Odraz je Standard ECMAScript 6. To také umožňuje využít newTarget argument, což je další výhoda oproti Nový operátor.

    Hodnota newTargetprototyp (abych byl přesný, je to prototyp newTargetkonstruktér) se stane prototypem nově vytvořené instance.

    Prototyp je vlastnost objektu, hodnota, která je také objekt, přenášení vlastností původního objektu. Stručně řečeno, objekt získá své členy z jeho prototypu.

    Podívejme se na příklad:

     class konstructor () this.message = function () console.log ('zpráva od A') třída B constructor ()  message () console.log ('zpráva od B')  data () console.log ('data z B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // zpráva z A console.log (obj.data ()); // data z B console.log (obj instanceof B) // true 

    Předáním B jako třetí argument Reflect.construct (), hodnota prototypu obj objekt je aby byly stejné jako prototyp Bkonstruktoru (který má vlastnosti zpráva a data).

    Tím pádem, obj přístup k zpráva a data, k dispozici na jeho prototypu. Ale od obj se provádí A, má také své vlastní zpráva to od A.

    Přestože obj je konstruován jako pole, to je není instancí Array, protože jeho prototyp je nastaven na Objekt.

     obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false 

    Reflect.construct () může být užitečné, když chcete vytvořit objekt pomocí více než jednoho plánu.

    3. Object.create () metoda

    Můžete také vytvořit nový obyčejný objekt se specifickým prototypem přes Object.create (). To se také může zdát velmi podobné použití Nový operátor, ale není to tak.

     Object.create (O [, propertiesObject]) 

    Ó argument je objekt, který slouží prototypu pro nový objekt, který bude vytvořen. Volitelné propertiesObject argument je seznam vlastností můžete přidat nový objekt.

     třída A konstructor ()  message () console.log ('zpráva od A') var obj = Object.create (nový A (), data: zapisovatelný: true, konfigurovatelný: true, hodnota: function () return 'data z obj') console.log (obj.message ()) // zpráva z console.log (obj.data ()) // data z obj obj1 = Object.create ( new A (), foo: writable: true, konfigurovatelné: true, hodnota: function () return 'foo z obj1') console.log (obj1.message ()) // zpráva z A konzoly. log (obj1.foo ()) // foo z obj1 

    V obj objekt, přidaná vlastnost je data, zatímco v obj1, to je foo. Takže, jak vidíte, můžeme mít vlastnosti a metody přidané do nového objektu.

    To je skvělé, když chcete vytvořit více objektů stejného druhu ale s různých doplňkových vlastností nebo metod. Object.create () syntaxe šetří problémy s jejich kódováním.