Autor Zpráva
yoyer
Profil
Dobrý den. Chtěl jsem se zeptat, jestli v JS existuje něco jako neměnná(read-only) proměnná. Podle názvu i češtinářsky si to odporuje, ale mohlo by to existovat. Prám se proto, že potřebuji zabránit jejímu přepsání připadným hackerem/zvědavým uživatelem. Napadlo mě vložit obsah do <textarea> a na událost onChange zareagovat zvrácením pokusu, jenže jak google tak moje pozdější zkušenosti mi řekly, že takhle to nepůjde.
Za každou radu budu vděčný.
panhuhu
Profil
Chtěl jsem se zeptat, jestli v JS existuje něco jako neměnná(read-only) proměnná.
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Constan ts
Bubák
Profil
yoyer
Nevím, o co přesně se pokoušíš, ale JS běží u klienta a dá se (po)změnit. Z toho důvodu nemůžeš výsledku JS věřit.
ah01
Profil
panhuhu
Pokud neplánuje funkčnost pouze ve FF tak je v praxi nepoužitelné.

yoyer
Můžeš použít třeba privátní proměnné (pomocí closure). Nechceš trochu víc naznačit, co přesně potřebuješ?
panhuhu
Profil
ah01
Samozřejmě, že to vím. V té dokumentaci by to mělo být někde uvedeno. Nicméně od JS 2.0 by měla být definice konstanty podporována.
yoyer
Profil
ah01
Vytvářím aplikaci, která by byla nesmírně náročná na přenos dat a na výkonnost serveru. Z toho důvodu některá data ukládám do proměnné u klienta a následně je zpracovávám javascriptem. Proces zpracování je bezpečný a zabezpečený, jenže pokud by uživatel nepovoleně pozměnil hodnotu proměnné, mohlo by to narušit běh aplikace. Z toho důvodu potřebuji, aby se proměnná nedala změnit.
ah01
Profil
yoyer
http://www.crockford.com/javascript/private.html
los
Profil *
Ak používateľ chce zmeniť hodnotu premennej, nič mu v tom nezabráni. Kým to ovplyvní iba beh u toho klienta, ktorý zmenil hodnotu, tak je úplne zbytočné to riešiť.
ah01
Profil
los
Určitě? Předpokládejme následující kód:
function Osoba(jmeno, prijmeni)
{
  var name = jmeno + " " + prijmeni;

  var osoba = {
    getName: function(){
      return name;
    },
    introduction: function(){
      alert("My name is " + name);
    }
  }; 
  
  return osoba;
}

var jan = Osoba("Jan", "Novak");
jan.introduction();

Dokážeš změnit name Osoby jan (bez toho aby jsi vytvářel novou osobu)?
los
Profil *
Asi si nepochopil, ako som to myslel. Keďže JavaScript sa vykonáva u klienta, tak je len na klientovi, ako ho vykoná. Napr. ho môže prehnať cez proxy a až potom ho nechá vykonať prehliadačom. Alebo môže použiť neštandardné rozšírenie (napr. vo Firefoxe sa dá zmeniť aj hodnota pseudoprivátnej premennej pomocou druhého argumentu metódy eval - v tvojom špeciálnom príklade je to síce nepoužiteľné, pretože si pomenoval tú premennú ako name). Prípadne ho vôbec nemusí spracovávať prehliadačom, ale vlastným programom. Skrátka možností je veľa.

Ak to ovplyvní len toho klienta, ktorý to zmení, tak je úplne zbytočné to ošetrovať.
peta
Profil
yoyer
viz Bubák a viz los
JS bezi u klienta. JS take bezet u klienta nemusi. V IE7 jsou defaultne zakazane dotazovaci hlasky prompt.
Udajum od klienta NELZE verit.

JS nejde nijak blokovat, vzdycky ti na stranku muzu pridat vlastni script. Jeste jsem se nesetkal se stranku, kde by to neslo. Vyuzivam bookmarklet Modi2, treba.
Moznosti, ktere to zakazuji podle panhuhu a ah01 nemam prozkoumane, ale myslim, ze nic takove nejde. Ani bych v tom nevidel prinos.

"Vytvářím aplikaci, která by byla nesmírně náročná na přenos dat a na výkonnost serveru. "
Mozna by to chtelo blizsi informace, treba by jsme ti poradili, jak snizit datovy tok na minimum.

priklad - vyhledavani
Nekteri lide treba vyuzivaji JS ajax pro vyhledavani informaci, ale neuvedomuji si, ze pri 1-3 znacich to najde spoustu moznosti a meli by ten ajax volat az po tretim znaku.
Podobni lide volaji ajax pokazde.
Jini dalsi osetri stav na 2 znaky, ale zapomenou, ze maji uz vytahle vsechny moznosti a pri znaku 3 volaji ajax zbytecne znovu, ikdyz uz ty informace jednou maji. Tohle ma smysl pouze tehdy, pokud max. pocet vysledku je omezeny a uz pri prvnim hledani byl pocet vetsi nez toto maximum.

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:

0