考虑以下示例HTML:
<div id="about">
<!-- content here -->
</div>
以下脚本
var about = (function ($, window, document) {
"use strict";
var methods;
methods = {
init: function () {
// Do things here
}
};
return methods;
} (jQuery, window, document));
此时变量about
应附加到window
对象。
在Firefox(3.6.17)中,我可以写
window["about"]
如果尚未处理,那么这将返回undefined
如果有,它将按照我的预期返回对象。
然而,问题是Chrome和IE(7&amp; 8)中的相同代码window["about"]
会返回实际的HTML对象。从上面的示例中,它将返回以下内容:
<div id="about">
<!-- content here -->
</div>
为什么会这样?
此外,有没有比使用about
元素更好的方法来检查window
对象是否可用?我理所当然地意识到一个人不想把窗户对象扔掉,但这是一个不同的问题。
由于
答案 0 :(得分:4)
WebKit浏览器似乎模仿了将元素“id”值视为window
对象属性的旧IE行为。
我个人不喜欢这种行为。
答案 1 :(得分:1)
Chrome会在HTML中获取任何ID并将其转换为全局变量。你可以改写作业,但我认为你正在检查是否存在而不是覆盖?
答案 2 :(得分:1)
区分HTMLElement
和函数的一种方法是检查对象的类型:
if (typeof window.about === 'function') {
// the 'about' function has been defined
}
答案 3 :(得分:0)
不幸的是,唯一可以做到这一点的方法如下:
function global(name) { return eval(name); }
if( global("about") )
...