Javascript对象请帮忙

Javascript对象请帮忙,javascript,Javascript,我试图在javascript名称空间中创建一个名为$browser的对象,该对象根据功能检测返回Internet Explorer版本号 在我的对象中调用函数ieVersion时遇到问题,并出现错误ieVersion未定义 我可以在$浏览器对象外部调用$browser.ieVersion(),但不能在内部调用 我想做的是说 if($browser.ie6){ // run my specific code... } 任何指示 更新。。。。我试着听从卡萨布兰卡的建议,并更新了代码,以反映我对

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

在我的对象中调用函数
ieVersion
时遇到问题,并出现错误
ieVersion未定义

我可以在$
浏览器
对象外部调用
$browser.ieVersion()
,但不能在内部调用

我想做的是说

if($browser.ie6){
  // run my specific code...
}
任何指示

更新。。。。我试着听从卡萨布兰卡的建议,并更新了代码,以反映我对他的变化的理解。。。。我现在在
名称空间中出现了错误
预期“:”
。$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;    

};
//为函数命名命名空间以消除冲突的可能性。
变量名称空间={
/// 
///浏览器对象允许检测ie版本。
/// 
$browser:{
ie6:命名空间.$browser.ieVersion()==6,
/// 
///使用功能检测返回internet explorer浏览器编号。
/// 
ieVersion:函数(){
var$version=0;
//浏览器是IE6-8。
if(!jQuery.support.leadingWhitespace){
//IE 6和7。
if(!jQuery.support.boxModel){
if(!jQuery.support.opacity&&!window.XMLHttpRequest){
$version=6;
}
否则{
$version=7;
}
}
否则{
$version=8;
}
}
返回$version;
}
},
名称空间。$browser.ie6=名称空间。$browser.ieVersion()==6;
};

这一行有两个问题:

ie6: ieVersion() === 6
Namespace.$browser.ie6 = Namespace.$browser.ieVersion() === 6;  
首先,
ieVersion
本身指的是全局(而不是函数级)名称空间。您需要将其完全限定为
名称空间。$browser.ieVersion

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

将这一行放在
名称空间的声明下方

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

它告诉你这句话:

ie6: ieVersion() === 6
Namespace.$browser.ie6 = Namespace.$browser.ieVersion() === 6;  
不是浏览器对象的有效属性,您将其放置在浏览器对象的位置。它应该有一个
,而不是
=
(尽管语法仍然无效,因为您不能为属性名称命名),或者它应该放在对象声明之外


此外,您仍然存在与@casablanca在代码前面提到的问题完全相同的问题——即使您在
ie6
属性中为代码命名了空间,但它仍然引用了一个尚不存在的函数。

感谢您的编辑。。。现在读起来容易多了。你为什么要把功能检测降级为用户代理嗅探呢?很久以前我和一个叫詹姆斯·南方的伟大小号手一起上高中。@Pointy。。。恐怕不是我,吉他只在体育场摇滚乐的钥匙里。@难以捉摸。。。。。我明白你的意思,但这基本上是一个快速而肮脏的测试。如果你看代码,我不是在看用户代理,只是功能检测测试,我知道IE 6、7和8会失败。。名称空间。$browser.ie6=名称空间。$browser.ieVersion()==6;我得到一个错误,应该是“:”@James South:你在哪里添加了这一行?它应该在对象声明之外和之后。我已经更新了我的代码,以反映我对您的建议的解释。@James South:它需要在整个声明之外,在结束后
var命名空间的code>