Autor Zpráva
joshua
Profil *
zdravim, nevíte, jaký je rozdíl mezi new RegExp a RegExp? dík...

Moderátor Chamurappi: Titulek „RegExp“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Joker
Profil
RegExp je název třídy a new RegExp je konstruktor?
joshua
Profil *
To je sice hezká poučka, ale vysvětli mi to prosím jako pro blbce, tedy pro mě. Konstruktor, třída, to mi nic neříká. Jaký dopad to bude mít v programování, co se stane, když v regulárních výrazech smažu to new? Skazím tím něco? Dík moc krát...
Kajman_
Profil *
co se stane, když v regulárních výrazech smažu to new?
Pokazí se to.
peta
Profil
joshua
Tak jo, pro tebe :)
var x = function () {alert(ahoj);}
x();

x = function () {alert(ahoj);}
x();

function x() {alert(ahoj);}
x();

x = 5;

x = alert;
x('123');

x = Math.sin;
alert(x(45*Math.PI/180));

function x()
{
this.neco = 5; 
this.sin = function(uhel) {return Math.sin(uhel*Math.PI/180);}
}
y = x;
alert(y);
x.neco = 10;
alert(y.neco); // to by melo dat myslim 10, nedelas klon objektu, jen rozmnozujes moznost jeho volani do promenne y
y = new x;
x.neco = 15;
alert(y.neco); // to by melo dat myslim 10, protoze v Y je uplne novy objekt

x = RegExp // pak znamena, ze misto RegExp muzes pouzivat nyni i X
y = new x('a','g');
str = 'aaa';
str = str.replace(y,'b');
alert(str);

Moderátor Chamurappi: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Joker
Profil
peta:
Gratuluju, v tomhle "vysvětlení jako pro blbce" jsem se zamotal i já :)

joshua:
To je sice hezká poučka, ale vysvětli mi to prosím jako pro blbce, tedy pro mě. Konstruktor, třída, to mi nic neříká.
Fajn:
To je podobný rozdíl, jako třeba "auto" a "moje auto"*. Auto je obecné jméno pro všechna existující auta- to je třída. Moje auto je jedno konkrétní auto- tomu se říká instance. Pokud se chci přepravit z místa na místo, nestačí mi třída (tj. řekněme "myšlenkový koncept auta"), ale potřebuju instanci (nějaké konkrétní auto).

Tak a teď zpátky k programování:
RegExp je třída. Když chci pracovat s nějakým konkrétním regulárním výrazem, potřebuju instanci třídy RegExp. Instance třídy se v Javascriptu vytvoří zápisem new Třída.
Tedy:
var r = new RegExp();

vytvoří novou instanci třídy RegExp a přiřadí do proměnné r.

*poznámka: Termín "moje auto" v tom příkladu znamená to jedno konkrétní, které bylo moje ve chvíli psaní příspěvku. Nechtěl jsem se zamotávat do popisu aut :)
Chamurappi
Profil
Reaguji na joshuu:
co se stane, když v regulárních výrazech smažu to new?
Nejspíš nic. Stejně jako u Stringu, protože obě tyto třídy počítají s tím, že mohou být použité jako funkce.
Ale u jiných tříd to tak většinou fungovat nebude.
DoubleThink
Profil *
Auto je obecné jméno pro všechna existující auta- to je třída
Možná bych tomu říkal radši prototyp, třídy JS tuším nemá - možná předlohy pro kompilaci objektů v Chromu by mohly být považovány za třídy.
Ale možná kecám, protože mám zkušenost až s druhou nejpoužívanější variantou ECMAScriptu.
_es
Profil
peta
Napriek tomu, že som to celé prečítal, tak tam odpoveď na prvú otázku nikde nevidím.
Okrem toho tam máš nejaké nezmysly.

Moderátor Chamurappi: Vkládej prosím kódy mezi značky pre a /pre
Pre tohoto člena nemá táto výzva zmysel.
Budeš to tam musieť vkladať zaňho. (lebo je to pre neho nepovinné)

Joker
RegExp je název třídy a new RegExp je konstruktor?
RegExp je funkcia a new RegExp je vytvorený objekt (výsledok volania funkcie RegExp ako konštruktora). JavaScript nemá triedy.

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: