Objektové konstruktory JavaScriptu
Příklad
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Za dobrou praxi se považuje pojmenování funkcí konstruktoru velkým prvním písmenem.
Typy objektů (plány) (třídy)
Příklady z předchozích kapitol jsou omezené. Vytvářejí pouze jednotlivé objekty.
Někdy potřebujeme " návrh " pro vytvoření mnoha objektů stejného "typu".
Způsob, jak vytvořit "typ objektu", je použít funkci konstruktoru objektu .
Ve výše uvedeném příkladu function Person()
je funkce konstruktoru objektů.
Objekty stejného typu se vytvářejí voláním funkce konstruktoru s new
klíčovým slovem:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
Toto klíčové slovo
V JavaScriptu se nazývá this
objekt, který „vlastní“ kód.
Hodnota this
, je-li použita v objektu, je samotný objekt.
V konstruktoru funkce this
nemá hodnotu. Je to náhrada za nový objekt. Hodnota this
will se stane novým objektem při vytvoření nového objektu.
Všimněte si, že this
to není proměnná. Je to klíčové slovo. Nemůžete změnit hodnotu this
.
Přidání vlastnosti k objektu
Přidání nové vlastnosti k existujícímu objektu je snadné:
Příklad
myFather.nationality = "English";
Vlastnost bude přidána do myFather. Ne mé matce. (Ne namítá žádné jiné osobě).
Přidání metody k objektu
Přidání nové metody do existujícího objektu je snadné:
Příklad
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
Metoda bude přidána do myFather. Ne mé matce. (Ne namítá žádné jiné osobě).
Přidání vlastnosti do konstruktoru
Novou vlastnost nemůžete přidat do konstruktoru objektu stejným způsobem, jako přidáváte novou vlastnost k existujícímu objektu:
Příklad
Person.nationality = "English";
Chcete-li do konstruktoru přidat novou vlastnost, musíte ji přidat do funkce konstruktoru:
Příklad
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Tímto způsobem mohou mít vlastnosti objektu výchozí hodnoty.
Přidání metody do konstruktoru
Vaše funkce konstruktoru může také definovat metody:
Příklad
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
Novou metodu nemůžete přidat do konstruktoru objektu stejným způsobem, jako přidáváte novou metodu k existujícímu objektu.
Přidání metod do konstruktoru objektu musí být provedeno uvnitř funkce konstruktoru:
Příklad
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
Funkce changeName() přiřadí hodnotu name vlastnosti lastName osoby.
Nyní můžete vyzkoušet:
myMother.changeName("Doe");
JavaScript ví, o které osobě mluvíte, když to „ nahradí “ myMother .
Vestavěné konstruktory JavaScriptu
JavaScript má vestavěné konstruktory pro nativní objekty:
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
Objekt Math()
není v seznamu. Math
je globální objekt. Klíčové new
slovo nelze použít na
Math
.
Věděl jsi?
Jak můžete vidět výše, JavaScript má objektové verze primitivních datových typů String
, Number
a Boolean
. Není ale důvod vytvářet složité objekty. Primitivní hodnoty jsou mnohem rychlejší:
Použijte řetězcové literály ""
místo new String()
.
Použijte číselné literály 50
místo new Number()
.
Použijte booleovské literály true / false
místo new Boolean()
.
Použijte objektové literály {}
místo new Object()
.
Použijte literály pole []
namísto new Array()
.
Použijte vzorové literály /()/
místo new RegExp()
.
Použijte funkční výrazy () {}
místo new Function()
.
Příklad
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
Řetězcové objekty
Normálně jsou řetězce vytvářeny jako primitiva: firstName = "John"
Ale řetězce lze také vytvořit jako objekty pomocí new
klíčového slova:
firstName = new String("John")
V kapitole JS Strings se dozvíte, proč by řetězce neměly být vytvářeny jako objekt .
Počet objektů
Normálně se čísla vytvářejí jako primitiva: x = 30
Čísla však lze také vytvořit jako objekty pomocí new
klíčového slova:
x = new
Number(30)
Přečtěte si, proč by čísla neměla být vytvářena jako objekt v kapitole JS Numbers .
Booleovské objekty
Normálně jsou booleany vytvářeny jako primitiva: x =
false
Ale booleany lze také vytvořit jako objekty pomocí new
klíčového slova:
x = new Boolean(false)
V kapitole JS Booleans se dozvíte, proč by se logické hodnoty neměly vytvářet jako objekt .