QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hájtek] JavaScript tippek és trükkök #2

2013.01.01. 11:00 | TrueY | 7 komment

Címkék: 2012 hájtek

Itt az új év: 2013. Mindenkinek kívánok sok-sok boldogságot és world peace!

Találtam egy jó kis oldalt, amin sok-sok megoldás olvasható: code.google.com. De az e témában megejtett korábbi hozzászólásim is >itt< olvashatók.

Hogyan nézhetjük meg, hogy egy adott nevű függvény létezik-e, ha már nagyon elkeveredtünk a sok betöltött javascript kódok sűrűjében. A typeof(name) hívás "undefined" string-et ad vissza, ha nincs és a "name"-nek megfelelő objektum (ami még nem biztos, hogy függvény), string-et, ha valami más. Így nem meglepő, hogy "function"-t kapunk, ha a name függvény létezik.

De mit csinálhatunk akkor, ha a függvényünk neve egy string-ben van definiálva? Pánik gomb helyett használhatjuk az eval() függvényt. 

var func = "_my_function_" + function_name;
var x = eval("typeof " + func);

Az x értéke "undefined" string, ha nincs, "function", ha függvény, és bármi más, ha bármi más.

Meg is hívhatjuk az függvényt, ha ellenőriztük, hogy létezik-e:

var x = eval(func + "()");

Ha nincs visszatérési érték, akkor x értéke undefined lesz. Ha van, akkor az x változó értéke a visszatérési érték lesz.

Hogyan lehetne egy eval() hívást megspórolni? Használjuk a try-catch párost, amivel (szerintem) még "normálisabb" kódot is kapunk:

var func = "_my_function_" + function_name;
 try {
     var ref = eval(func);
} catch (e) {
    return {err: "Not defined function (" + func + ") was found!"};
}
if (typeof(ref) != 'function')
    return {err: "Fatal error (" + func + ")!"};
var ret = ref();

És egy újabb érdekes adat: Egy függvényben definiált függvényben minden, a definiáló függvényben definiált változó látható (írható, olvasható) lesz. Így egy csomó paraméter átadást megspórolhatunk magunknak! És persze némileg olvashatatlanabbá tesszük a kódot. Persze, aki menet közben létrehozott nevű függvényeket hív meg, az ne panaszkodjon!

Hoppá, fogtam egy érdekességet. Amibe úgy látom, hogy többen is beleszaladtak. Ha egy HTML file tartalmaz egy <script...> tag-et és a script-en belül bárhol (mondjuk egy string-ben) feltűnik az a karaktersorozat, hogy '</script>', akkor ott véget ér a szkript parse-olása és visszatér HTML parse-olásra a browser. Ez nagy baj! Hogyan lehet ezt megszüntetni. Van ahol azt ajánlották, hogy (előre mondom, rossz!)

<script ...>
//<![CDATA[
...
var s = '</script>';
...
//]]>
</script>
Ez bár nagyon tetszetős megoldás lenne, de csak XHTML esetén működőképes! Szóval ha ilyen oldalt szeretnénk mégis, akkor egy picit csúnyább megoldáshoz kell folyamodnunk:

<script ...>
...
var s = '</scr'+'ipt>';
...
</script>

Kávéírás minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr224500229

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nem akarok tolakodo lenni, de vegre hozza tudok szolni egy Ha'jtek poszthoz is.
Igaz, csak annyit akartam irni, hogy Boldog Uj Evet! De azert penge vagyok a temaban, nem igaz? :o))))
@Attilajukkaja: Örülök, hogy bővíted a látókörödet! ;) Neked is BÚÉK!
@Attilajukkaja: Akkor te már dupla annyit tudsz a témában, mint én... buzi hájtek fan.... : )
@NYJetsTD: @TrueY:
Igazatok van, nem ertek hozza. Es nem is akarok ugy tenni, mintha ertenek a temahoz. Raadasul nem keszulok politikusnak.
En annak idejen meg valodi munkaval szereztem meg a PHD-mat. Nem is tavolodtam el attol, amihez velhetoen ertek.

Ez a JavaScript szamomra csak egy program, semmi tobb. Korlatozott a felhasznalhatosaga.
Kivancsi vagyok arra, hany "geek" ir majd be azzal, hogy, meltassa az elgondolast.
En csak BUEK-ot akartam kivanni. Muszaj volt csatlakoznom valahova. Ennyi.
@Attilajukkaja: "En annak idejen meg valodi munkaval szereztem meg a PHD-mat"

Cöcö! Semjén is ezt bizonygatya... :) Én annak ellenére, hogy két saját magam által összelapátolt diplomám van, egyiket sem használtam soha. Na jó, az elsőt valamennyire igen, amikor Ph.D.-t kezdtem csinálni, de annyira kevés volt az ösztöndíj, hogy inkább elmentem munkanélkülinek 2 hétre. :)

"JavaScript szamomra csak egy program"

Kicsit cizellálnám. A JS egy programnyelv. :)
@TrueY:
"A JS egy programnyelv. :) "
Bocsanat a hianyos terminologiaert. En sem mas (TV vagy hetvegi) programra gondoltam. De azt hittem, te erted, mire gondolok. Cöcö! :o))))
[Bocsi, de az egeszbol csak annyit ertettem meg, hogy ez egy programnyelv. Kerlek, ha lehet, ne ezert alazzal szanaszet!!]

"Semjén is ezt bizonygatya... :)"
Ez valoban borzaszto. Ne is idegesits ezekkel a megelhetesi doktorokkal!!! Nagyon szegyenletes az a rendszer, amely ezeknek PhD-t adott. Foleg azert idegesit, mert nekem is a Semmelweis E. adott annak idejen doktorit. Most ne tudom, hogy melyikunk doktorijat ruheljem jobban!
Nagyon rossz erzes, de az a benyomasom, hogy a sajat doktorim erteke is csokkent azzal, hogy ezek az emberek kepbe kerultek. Devalvaltak engem!!!! (Na mit szolsz? Ilyen kifejezeseket is tudok! ~ Risza-risza ~)
De komolyan. Tenyleg rossz erzes!

"Én annak ellenére, hogy két saját magam által összelapátolt diplomám van, egyiket sem használtam soha."
Erre nem lennek ennyire buszke. Persze nem itelkezem anelkul, hogy ismernem a sztoridat.
Nem tudom, milyen ket diplomat szereztel. Nekem csak egy van, de azt celtudatosan szereztem. Igaz, azt is tudom, hogy szerencsem volt vele.
Minek ket diploma?
@Attilajukkaja: "te erted, mire gondolok."

Értem, de aki engem olvas, vagy ide kommentel, attól elvárom a szabatos fogalmazást! ;)

"sajat doktorim erteke is csokkent"

Így devalválódik minden ebben az országban. A rendszerváltás idején hatalmas címerrel a hátizsákomon jártam és azt terveztem, hogy Atillát csináltatok magamnak, mert szerintem szép. Csak 1 év kellett, hogy leszedjem magamról ezeket. Ha ma meghallom, hogy "nemzeti", akkor egyből az jut az eszembe, hogy valaki közpénzt akar megint lopni.

"Erre nem lennek ennyire buszke"
Nem büszkeség, tény.

"azt celtudatosan szereztem"
Én szinte semmit sem csinálok céltudatosan. Ez van. :)
süti beállítások módosítása