代码之家  ›  专栏  ›  技术社区  ›  James South

Javascript对象帮助

  •  0
  • James South  · 技术社区  · 15 年前

    我试图创建一个名为 $browser 在我的javascript命名空间中,它根据功能检测返回Internet Explorer版本号。

    调用函数时遇到问题 ieVersion 在我的目标范围内 ieVersion is not defined .

    我可以打电话 $browser.ieVersion() 在$ browser 对象,但不在内部。

    我想做的是说。。

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

    任何指针。。。。。

    更新。。。。我试着听从卡萨布兰卡的建议,并更新了代码,以反映我对他的变化的解释。。。。我现在有错误了 Expected ':' 在 Namespace.$browser

    我的代码。。。。

    // 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;    
    
    };
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   casablanca    15 年前

    这条线路有两个问题:

    ie6: ieVersion() === 6
    

    第一, ieVersion 它本身引用全局(而不是函数级)命名空间。你必须完全符合 Namespace.$browser.ieVersion .

    其次, 电子版本 尚未定义。只有在创建了整个对象之后,它才可用。不能引用同一对象文本中的另一个函数。因此您只能初始化 ie6 在定义了整个对象之后。

    把这一行写在 Namespace :

    Namespace.$browser.ie6 = Namespace.$browser.ieVersion() === 6;
    
        2
  •  0
  •   Brian Moeskau    15 年前

    它告诉你这句话:

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

    不是浏览器对象的有效属性,这是您放置该对象的位置。它应该有一个 : 而不是 = (尽管语法仍然是无效的,因为您不能命名您的属性名)或者它应该放在对象声明之外。

    另外,您仍然有与前面代码中@casablanca提到的完全相同的问题——即使您在 ie6 属性,它仍然引用一个尚未存在的函数。