2010-11-26 5 views
0

私は、機能検出に基づいてInternet Explorerのバージョン番号を返すjavascript名前空間内に$browserというオブジェクトを作成しようとしています。Javascriptオブジェクトのヘルプ

私のオブジェクト内で関数ieVersionを呼び出す際に問題があり、エラーieVersion is not definedがあります。

$ browserオブジェクトの外には$browser.ieVersion()を呼び出すことはできますが、その中には入りません。

私は何をできるようにしたいことは言う..です

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

任意のポインタ.....

UPDATE ....私からアドバイスに従うことを試してみましたカサブランカとは....私は今Namespace.$browser

マイコードでエラーExpected ':'を持って....彼の変化の私の解釈を反映するために、コードを更新しました

// 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

編集していただきありがとうございます...今はるかに簡単です。 –

+3

なぜフィーチャ検出をユーザーエージェントのスニッフィングにダウングレードしますか? – jwueller

+1

私は非常に長い時間前に、ジェームズ・サウスという名高いトランペット・プレイヤーで高校に行きました。 – Pointy

答えて

2

このラインを有する2つの問題がある:

ie6: ieVersion() === 6 

まず、ieVersionは、それ自体では、グローバル(機能レベルではなく)名前空間を指します。 Namespace.$browser.ieVersionと完全修飾する必要があります。

第2に、ieVersionはまだ定義されていません。これは、オブジェクト全体が作成された後にのみ使用できます。同じオブジェクトリテラル内の別の関数を参照することはできません。したがって、オブジェクト全体が定義された後でのみ、ie6プロパティを初期化することができます。

Namespaceの宣言の下に次の行を入れてください:

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

2行目を追加すると.. Namespace。$ browser.ie6 = Namespace。$ browser.ieVersion()=== 6;私はエラーが発生する予想される ':' –

+0

@ジェームス南:あなたはこの行をどこに追加しましたか?それはオブジェクト宣言の外側と後ろにあるべきです。 – casablanca

+0

あなたの提案の解釈を反映するためにコードを更新しました。 –

0

この行ことを伝えるだ:

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

は、あなたがきたところで、あなたのブラウザオブジェクトの有効なプロパティではありませんそれを置く。 =の代わりに:が必要です(ただし、プロパティ名に名前を付けることができないため、構文は無効ですが)。または、オブジェクト宣言の外側に配置する必要があります。

ie6プロパティのコードに名前を付けてもまだ存在しない関数を参照しているにもかかわらず、コードの前の@casablancaで述べたのとまったく同じ問題があります。