2010-11-26 6 views
0

Ich versuche, ein Objekt namens $browser innerhalb meines Javascript-Namespace zu erstellen, die Internet Explorer-Versionsnummern basierend auf Feature-Erkennung zurückgibt.Javascript-Objekte helfen bitte

Ich habe Probleme mit der Funktion ieVersion in meinem Objekt aufrufen und haben den Fehler ieVersion is not defined bekam.

Ich kann $browser.ieVersion() außerhalb der $ browser Objekt aber nicht innerhalb aufrufen.

, was ich möchte in der Lage sein wird zu tun, sagen ..

if($browser.ie6){ 
    // run my specific code... 
} 

Alle Hinweise .....

UPDATE .... Ich habe versucht, den Rat von folgen Casablanca und haben den Code aktualisiert meine Interpretation seiner Änderungen widerzuspiegeln .... ich habe jetzt den Fehler Expected ':' bei Namespace.$browser

My-Code ....

// Namespace the functions to remove possibility of conflict. 
var Namespace = { 

    /// <summary> 
    /// The browser object allows detection of ie versions. 
    /// </summary> 
    $browser: { 

     ie6: Namespace.$browser.ieVersion() === 6, 

     /// <summary> 
     /// Uses feature detection to return the internet explorer browser number. 
     /// </summary> 
     ieVersion: function() { 
      var $version = 0; 
      // The browser is IE 6 - 8. 
      if (!jQuery.support.leadingWhitespace) { 

       // IE 6 & 7. 
       if (!jQuery.support.boxModel) { 
        if (!jQuery.support.opacity && !window.XMLHttpRequest) { 
         $version = 6; 
        } 
        else { 
         $version = 7; 
        } 
       } 
       else { 
        $version = 8; 
       } 
      } 
      return $version; 
     } 
    }, 

Namespace.$browser.ie6 = Namespace.$browser.ieVersion() === 6;  

}; 
+0

Danke für die Änderungen ... liest sich jetzt viel einfacher. –

+3

Warum würden Sie die Feature-Erkennung auf User Agent Sniffing zurückstufen? – jwueller

+1

Ich ging vor sehr langer Zeit mit einem großartigen Trompeter namens James South auf die High School. – Pointy

Antwort

2

Es gibt zwei Probleme mit dieser Zeile:

ie6: ieVersion() === 6 

Zuerst ieVersion selbst bezieht sich auf den globalen (und nicht funktions Ebene) Namespace. Sie müssen es vollständig als Namespace.$browser.ieVersion qualifizieren.

Zweitens ist ieVersion noch nicht definiert. Sie ist erst verfügbar, nachdem das gesamte Objekt erstellt wurde. Sie können nicht auf eine andere Funktion innerhalb desselben Objektliterals verweisen. Daher können Sie die Eigenschaft ie6 erst initialisieren, nachdem das gesamte Objekt definiert wurde.

Diese Zeile unterhalb der Deklaration von Namespace:

Namespace.$browser.ie6 = Namespace.$browser.ieVersion() === 6; 
+0

Wenn ich die zweite Zeile hinzufüge .. Namespace. $ Browser.ie6 = Namespace. $ Browser.ieVersion() === 6; Ich erhalte einen Fehler Erwartet ':' –

+0

@James South: Wo haben Sie diese Zeile hinzugefügt? Es sollte außerhalb und nach der Objektdeklaration sein. – casablanca

+0

Ich habe meinen Code aktualisiert, um meine Interpretation Ihrer Vorschläge widerzuspiegeln. –

0

Es ist Ihnen zu sagen, dass diese Zeile:

Namespace.$browser.ie6 = Namespace.$browser.ieVersion() === 6; 

ist keine gültige Eigenschaft Ihres Browsers Objekts, das ist, wo Sie haben Leg es. Es sollte eine : anstelle einer = haben (obwohl die Syntax immer noch ungültig sein würde, da Sie Ihren Eigenschaftennamen nicht mit einem Namespace versehen können) oder es sollte außerhalb der Objektdeklaration platziert werden.

Außerdem haben Sie immer noch genau das gleiche Problem wie zuvor von @casablanca im Code erwähnt - obwohl Sie den Code in Ihrer ie6-Eigenschaft Namespaced es verweist immer noch auf eine Funktion, die noch nicht existiert.

Verwandte Themen