Class basic syntax (Magyar)


az objektumorientált programozásban az osztály kiterjeszthető programkód-sablon objektumok létrehozásához, amely kezdeti értékeket biztosít az állam (tagváltozók) és a viselkedés (tagfunkciók vagy módszerek) megvalósításához.

a gyakorlatban gyakran sok azonos típusú objektumot kell létrehoznunk, mint például a felhasználók, vagy áruk vagy bármi más.

amint azt a fejezet Konstruktorából már tudjuk, az “új” operátor, new function segíthet ebben.,

de a modern JavaScript-ben van egy fejlettebb “osztály” konstrukció, amely nagyszerű új funkciókat vezet be, amelyek hasznosak az objektumorientált programozáshoz.

az” osztály ” szintaxisa

az alapvető szintaxis:

class MyClass { // class methods constructor() { ... } method1() { ... } method2() { ... } method3() { ... } ...}

akkor használja a new MyClass() új objektum létrehozásához az összes felsorolt módszerrel.

aconstructor() módszert automatikusan anew hívja, így inicializálhatjuk az objektumot.,

például:

class User { constructor(name) { this.name = name; } sayHi() { alert(this.name); }}// Usage:let user = new User("John");user.sayHi();

amikor new User("John")

  1. új objektum jön létre.
  2. a constructor fut az adott argumentummal, és hozzárendeli a this.name – hoz.

… akkor objektummódszereket hívhatunk, például user.sayHi().

nincs vessző az osztálymódszerek között

A kezdő fejlesztők számára gyakori hiba, hogy vesszőt helyeznek az osztálymódszerek közé, ami szintaktikai hibát eredményezne.,

a jelölés itt nem tévesztendő össze az objektum literálokkal. Az osztályon belül nincs szükség vesszőre.

mi az az osztály?

tehát mi is pontosan az a class? Ez nem egy teljesen új nyelvi szintű entitás, ahogy gondolhatnánk.

mutassunk be minden varázslatot, és lássuk, mi is valójában egy osztály. Ez sok összetett szempont megértésében segít.

A JavaScriptben az osztály egyfajta függvény.,

itt nézze meg:

class User { constructor(name) { this.name = name; } sayHi() { alert(this.name); }}// proof: User is a functionalert(typeof User); // function

mi class User {...}

  1. létrehoz egy User nevű függvényt, amely az osztály deklaráció eredményévé válik. A függvénykód a constructor metódusból származik (üres, ha nem írunk ilyen módszert).
  2. tárolja osztály módszerek, mint például a sayHi, a User.prototype.,

után new User objektum jön létre, amikor hívjuk a módszer, ez venni a prototípus, ahogy az a fejezetben leírt F. prototípus. Tehát az objektum hozzáférhet az osztály módszereihez.,a class User nyilatkozatot az alábbiak:

Itt a kód, hogy introspect ez:

Nem csak egy szintaktikus cukor

Néha az emberek azt mondják, hogy a class a “szintaktikus cukor” (szintaxis, amely célja, hogy könnyebb legyen olvasni, de nem vezet semmi új), mert mi is kijelentem, ugyanaz, anélkül, hogy a class kulcsszó egyáltalán:

Az eredmény ez a meghatározás körülbelül ugyanaz., Tehát valóban vannak olyan okok, amelyek miatt aclass szintaktikai cukornak tekinthető a konstruktor meghatározására a prototípus módszereivel együtt.

mégis fontos különbségek vannak.

  1. először a class által létrehozott függvényt egy speciális belső tulajdonság ]:"classConstructor"jelöli. Tehát nem teljesen ugyanaz, mint manuálisan létrehozni.

    a nyelv ellenőrzi, hogy a tulajdonság a különböző helyeken., Például, ellentétben a rendszeres funkció, kell, hogy legyen neve a new:

    class User { constructor() {}}alert(typeof User); // functionUser(); // Error: Class constructor User cannot be invoked without 'new'

    Is, egy string képviselet az osztály kivitelező a legtöbb JavaScript motorok kezdődik a “osztály…”

    class User { constructor() {}}alert(User); // class User { ... }

    vannak egyéb különbségek, hamarosan látjuk őket.

  2. Class methods are non-enumerable.,A class definition sets enumerable flag to false a "prototype"összes metódusára.

    Ez jó, mert ha egy objektum felett for..in, akkor általában nem akarjuk az osztály módszereit.

  3. osztályok mindig use strict.Az osztálykonstrukción belüli összes kód automatikusan szigorú módban van.

mellett, class szintaxis hoz sok más funkciók, hogy mi lesz felfedezni később.,

Class Expression

csakúgy, mint a függvények, az osztályok egy másik kifejezésen belül definiálhatók, körbejárhatók, visszaadhatók, hozzárendelhetők stb.

íme egy példa egy osztály kifejezésre:

let User = class { sayHi() { alert("Hello"); }};

hasonló a megnevezett Függvénykifejezésekhez, az osztálykifejezéseknek lehet neve.,

Ha egy osztály kifejezés van neve, ez látható be, hogy az osztály csak:

Úgy is, hogy órák dinamikusan “on-demand”, így:

, akik véghez viszik/alkotóinak

mint a szó szerinti objektumok, osztályok lehetnek, akik véghez viszik/alkotóinak, számított tulajdonságok stb.

Itt egy példa a user.name megvalósítva, hogy a get/set:

Gyakorlatilag ilyen osztály nyilatkozat működik, azáltal, akik véghez viszik, s alkotóinak a User.prototype.,

Számított nevek

Itt egy példa egy számított a módszer nevét használja zárójelben :

class User { () { alert("Hello"); }}new User().sayHi();

az Ilyen funkciók könnyű megjegyezni, mert hasonlítanak, hogy a szó szerinti tárgyakat.

Class fields

régi böngészők szükség lehet egy polyfill

class fields egy újabb mellett a nyelvet.

korábban osztályainknak csak módszerei voltak.

“Class fields” egy szintaxis, amely lehetővé teszi, hogy adjunk olyan tulajdonságokat.,

például, tegyük hozzá, name ingatlan itt: class User:

class User { name = "John"; sayHi() { alert(`Hello, ${this.name}!`); }}new User().sayHi(); // Hello, John!

Szóval, csak írni ” = ” a nyilatkozatot, de ez van.,

A fontos különbség az osztály mezők, hogy vannak beállítva, egyes tárgyak, nem a User.prototype:

class User { name = "John";}let user = new User();alert(user.name); // Johnalert(User.prototype.name); // undefined

Mi is rendelhet értékek segítségével összetettebb kifejezéseket funkció hívások:

class User { name = prompt("Name, please?", "John");}let user = new User();alert(user.name); // John

Így kötött módszerek osztály mezők

Amint azt a fejezet Funkció kötelező funkciók JavaScript dinamikus this., Ez a hívás kontextusától függ.

tehát, ha egy objektum metódus átkerül, és egy másik kontextusban hívódik meg, akkor a this nem lesz többé hivatkozás az objektumra.

például ez a kód undefined:

a probléma az úgynevezett “vesztes this“.

a rögzítéshez két megközelítés létezik, amint azt a fejezetfüggvény-kötés tárgyalja:

  1. adjon át egy wrapper-függvényt, például setTimeout(() => button.click(), 1000).
  2. a metódust objektumhoz köti, például a konstruktorban.,

az Osztálymezők egy másik, meglehetősen elegáns szintaxist biztosítanak:

az osztály mező click = () => {...} objektumonkénti alapon jön létre, minden Button objektum, a this benne az objektum hivatkozása. A button.click bárhol áthaladhatunk, és a this értéke mindig helyes lesz.

Ez különösen hasznos böngészőkörnyezetben, eseményhallgatók számára.,

összefoglaló

az alaposztály szintaxisa így néz ki:

MyClass technikailag egy függvény (az, amitconstructor), míg a metódusok, getterek és szetterek MyClass.prototype.

a következő fejezetekben többet megtudhatunk az osztályokról, beleértve az öröklést és egyéb funkciókat.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük