Autor Zpráva
icefireCZ
Profil
Dobrý den,

prosím mohli byste mi vysvětlit co znamená to "prototype" v následujícím kódu?

function Graph(){
  this.signs = [];
  this.eq = {};
}

Graph.prototype.addSign = function(n){
  this.signs.push(n);
}
Keeehi
Profil
Je to způsob, jak později měnit danou třídu. Přidat jí atributy a tak. Dá se to buď napsat takto, nebo ekvivalentní zápis by byl:
function Graph(){
  this.signs = [];
  this.eq = {};
  this.addSign = function(n){
    this.signs.push(n);
  }
}
Dan Charousek
Profil
Keeehi:
Dá se to buď napsat takto, nebo ekvivalentní zápis by byl:

Určitě ne, je v tom zásadní rozdíl. Viz. Živá ukázka

Tímto způsobem lze nadefinovat metodu pro třídu Graph. Je to poněkud vágní vysvětlení, protože OOP v javascriptu není třídní, nýbrž prototypové.
Zásadní rozdíl oproti Keeehiho verzi je v tom, že metody/funkce které obsahuje prototyp dané třídy/funkce jsou sdílené všem instancím, tudíž jestliže změním danou metodu, ovlivním tím její užití i v ostatních instancích. Z toho je patrné, že dané funkce existuje vlastně jedna. Pakliže metodu nadefinuji způsobem, uvedneým v [#2] při vytvoření nové instance se metoda jakoby zkopíruje a je pro instanci unikátní, tudíž změna prototypu neovlivní její fungování v existujících instancích. Tento přístup je paměťově náročnější, protože s každou instancí se musí metoda tvořit znovu.
icefireCZ
Profil
Dan Charousek:
Velmi zajímavé :)
Děkuji :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: