ugrás a tartalomhoz

"switch case" vs "this"

Karvaly84 · 2011. Ápr. 17. (V), 02.03
Hello guruk!

Egy olyan apró problémám lenne, hogy JavaScript-ben csináltam egy class-t és ha az egyik metódusában használom a this kulcsszót egy switch case ágon belül akkor olyan mintha nem találná a this-t.

/**
 * A fent említett class problémás metódusa
 */
send : function send(){
    var method = this.method.toUpperCase(),
        client = this.client, 
        async  = (this.async) ? true : false,
        query  = (typeof this.query === 'object') ? http.query(this.query)
               : (typeof this.query === 'string') ? this.query : null;
    switch (method) {
        case 'GET':
            // Az alábbi sorban a this.url nem elérhető pedig be van állítva.
            var url = this.url + (query) ? '?' + query : '';
            client.open(method, url, async); client.send(null);
        break;
        case 'POST':
            var url = this.url;
            client.setRequestHeader('Content-type', this.contentType);
            client.open(method, url, async); client.send(query);
        break;
    }
}
Ha a switch-en kívűl kérem le a this.url-t akkor vissza adja. Valaki röviden elmondaná mért van ez így? Csak ha nem tartok fel senkit. :)
 
1

Másfajta ellenőrzés

Poetro · 2011. Ápr. 17. (V), 07.15
Nem tudom, miért így írtad fel, szerintem a következő kicsit szebb lenne:
var url = (this.url || query) ? '?' + query : '';
De persze, lehet nem ezt akartad felírni, hanem azt hogy:
var url = this.url + (query ? '?' + query : '');
Mindenesetre figyelni kell, mert a ? : operátor precedenciája kisebb mint a +-é, ezért később hajtódik végre. Azaz a te példádban előbb lefut a this.url + (query), majd ha attól függően, hogy ez truthy, fut le a sor további része. Mindenképpen érdemes zárójelezni, ha nem tiszta számodra az operátorok sorrendje, vagy ha előfordulhat, hogy mást jelent a kifejezés máshogy zárójelezve.
2

köszi szépen

Karvaly84 · 2011. Ápr. 17. (V), 07.45
Ez nekem is eszembe juthatott volna, hogy ez a probléma, de nem jutott :D