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