V tomto výučbe sa pomocou príkladov dozviete o prototypoch v jazyku JavaScript.
Predtým, ako sa naučíte prototypy, nezabudnite si prečítať tieto návody:
- Objekty JavaScript
- Funkcia konštruktora JavaScriptu
Ako viete, objekt môžete vytvoriť v JavaScripte pomocou funkcie konštruktora objektov. Napríklad,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person();
Vo vyššie uvedenom príklade function Person()
je funkcia konštruktora objektu. Vytvorili sme dva objekty person1
a person2
z nich.
Prototyp JavaScriptu
V JavaScripte má každá funkcia a objekt predvolene vlastnosť s názvom prototyp. Napríklad,
function Person () ( this.name = 'John', this.age = 23 ) const person = new Person(); // checking the prototype value console.log(Person.prototype); // (… )
Vo vyššie uvedenom príklade sa pokúšame získať prístup k vlastnosti prototypu Person
funkcie konštruktora.
Pretože vlastnosť prototypu nemá v tejto chvíli žiadnu hodnotu, zobrazuje prázdny objekt (…).
Dedičstvo prototypov
V JavaScripte je možné prototyp použiť na pridanie vlastností a metód k funkcii konštruktora. A objekty dedia vlastnosti a metódy od prototypu. Napríklad,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding property to constructor function Person.prototype.gender = 'male'; // prototype value of Person console.log(Person.prototype); // inheriting the property from prototype console.log(person1.gender); console.log(person2.gender);
Výkon
(pohlavie: „muž“) mužský muž
Vo vyššie uvedenom programe sme gender
do funkcie Person
konštruktora pridali novú vlastnosť pomocou:
Person.prototype.gender = 'male';
Potom namietnite person1
a person2
dedte vlastnosť gender
z vlastnosti prototypu Person
funkcie konštruktora.
Preto obidva objekty person1
a person2
majú prístup k vlastnosti pohlavia.
Poznámka: Syntax na pridanie vlastnosti do funkcie konštruktora objektov je:
objectConstructorName.prototype.key = 'value';
Prototyp sa používa na zabezpečenie ďalších vlastností pre všetky objekty vytvorené z funkcie konštruktora.
Pridajte metódy do funkcie konštruktora pomocou prototypu
Môžete tiež pridať nové metódy do funkcie konštruktora pomocou prototypu. Napríklad,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding a method to the constructor function Person.prototype.greet = function() ( console.log('hello' + ' ' + this.name); ) person1.greet(); // hello John person2.greet(); // hello John
Vo vyššie uvedenom programe greet
je do funkcie Person
konštruktora pridaná nová metóda pomocou prototypu.
Zmena prototypu
Ak sa zmení hodnota prototypu, potom budú mať všetky nové objekty zmenenú hodnotu vlastnosti. Všetky predtým vytvorené objekty budú mať predchádzajúcu hodnotu. Napríklad,
// constructor function function Person() ( this.name = 'John' ) // add a property Person.prototype.age = 20; // creating an object const person1 = new Person(); console.log(person1.age); // 20 // changing the property value of prototype Person.prototype = ( age: 50 ) // creating new object const person3 = new Person(); console.log(person3.age); // 50 console.log(person1.age); // 20
Poznámka : Nemali by ste upravovať prototypy štandardných zabudovaných objektov JavaScriptu, ako sú reťazce, polia atď. Považuje sa to za zlý postup.
Reťazenie prototypov JavaScriptu
Ak sa objekt pokúsi získať prístup k rovnakej vlastnosti, ktorá je vo funkcii konštruktora a prototype objektu, objekt prevezme túto vlastnosť z funkcie konštruktora. Napríklad,
function Person() ( this.name = 'John' ) // adding property Person.prototype.name = 'Peter'; Person.prototype.age = 23 const person1 = new Person(); console.log(person1.name); // John console.log(person1.age); // 23
Vo vyššie uvedenom programe je názov vlastnosti deklarovaný vo funkcii konštruktora a tiež vo vlastnosti prototypu funkcie konštruktora.
Keď sa program spustí, person1.name
pozrie sa do funkcie konštruktora a zistí, či existuje vlastnosť s názvom name
. Pretože funkcia konštruktora má vlastnosť name s hodnotou 'John'
, objekt získa hodnotu z tejto vlastnosti.
Keď sa program spustí, person1.age
pozrie sa do funkcie konštruktora a zistí, či existuje vlastnosť s názvom age
. Pretože funkcia konštruktora nemá age
vlastnosť, program sa pozerá na prototypový objekt funkcie konštruktora a objekt dedí vlastnosť z prototypového objektu (ak je k dispozícii).
Poznámka : K vlastnosti prototypu funkcie konštruktora môžete pristupovať aj z objektu.
function Person () ( this.name = 'John' ) // adding a prototype Person.prototype.age = 24; // creating object const person = new Person(); // accessing prototype property console.log(person.__proto__); // ( age: 24 )
Vo vyššie uvedenom príklade sa person
objekt používa na prístup k vlastnosti prototypu pomocou __proto__
. Podpora __proto__
je však zastaraná a mali by ste sa jej vyhnúť.