Autor Zpráva
Darker
Profil
function Trida() {
  this.public = "text";
  var private1 = "text";
  var private2 = 42;
  this.getPrivate = function(name) {
     return /* ??? */;
  }
}
//Získání hodnoty private1:
var tr = new Trida();
alert(tr.getPrivate("private1"));
Jak vytvořím univerzální getter proměnných definovaných ve funkci? Bez eval.
Chamurappi
Profil
Reaguji na Darkera:
Nijak. Leda bys ty privátní proměnné měl v privátním objektu, pak můžeš používat objekt[name].
Mít takovouhle universální metodu stejně trochu postrádá smysl, ne?
Radek9
Profil
Darker:
Jsi si jistý, že ty proměnné opravdu potřebuješ privátní? Stalo by se něco, kdyby se k nim dalo dostat zvenčí? Jestli ne, tak je normálně navěs na instanci a zbytečně nevytvářej funkce v konstruktoru.
_es
Profil
Darker:
Správne použitie premenných z hľadiska výkonu je také, aby kompilátor či interpret „vedel“ už pred behom skriptu o aké premenné ide a nemusel vyhodnocovať ich názov. Taký „univerzálny getter“ by to narušil, preto to ide len „škaredou“ funkciou eval, či podobne „škaredými“ spôsobmi. Je o tom zaujímavý článok: http://www.zdrojak.cz/clanky/javascript-vykonnostne-neprijemne-konstrukce/

Išlo by sprístupniť argumenty funkcie, no len podľa ich poradového čísla:
function Trida(a,b,c) {
  this.public = "text";
  var arg = arguments;
  this.getPrivate = function(i) {
     return arg[i];
  }
}
var tr = new Trida(10,20,30);
alert(tr.getPrivate(0));
No asi to nie je veľmi dobrý nápad.

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: