尝试将对象的属性设置为新对象,而 IE 9 给出了一个奇怪的错误 “对象不支持此操作”我不明白为什么这是唯一提示的浏览器。
http://jsfiddle.net/billpull/QNm6f/1/
我按照解析的顺序编写了代码,想知道这是否是问题所在,因为从技术上讲,浏览器会在对象存在之前到达这部分,但当代码实际执行时,它确实存在。
var project = {};
project.viewModels = {};
project.myViewLocator = {
viewOne: null,
viewTwo: null
};
$(function () {
project.myViewLocator.viewOne = new project.viewModels.ViewOneModel();
});
project.viewModels.ViewOneModel = function () {
// some logic
};
最佳答案
您的 jsFiddle 存在此排序问题,因为您将其设置为 onload
在左侧面板中。这意味着当您调用时:
$(function () {
project.myViewLocator.viewOne = new project.viewModels.ViewOneModel();
});
文档已经加载,因此它立即执行回调,因此 ViewOneModel()
尚未定义。
如果将左侧面板更改为“<body>
中不换行”,则排序问题就会消失,因为文档尚未准备好,并且在定义构造函数之前不会调用回调函数。
如果您发现浏览器之间的时间差异,这可能是由于 jQuery 在不同浏览器中实现 DOMReady 方法的方式不同。但是,在所有情况下,都要等待运行代码,直到 onload
has fire 意味着 DOM 已经准备好,并且 DOMReady 代码可能已经触发或者可能在注册时立即触发。
最简单的建议是在使用任何函数之前定义它,而不必担心像这样的计时问题。
更多信息:通过 jQuery 实现 .ready()
进行跟踪(或您正在使用的表单),您可以找到以下代码块:
// Do we need to add the callbacks to the
// current firing batch?
if ( firing ) {
firingLength = list.length;
// With memory, if we're not firing then
// we should call right away
} else if ( memory ) {
firingStart = start;
fire( memory );
}
这表明(你可以阅读注释)如果 DOM 已经准备好,jQuery 在你注册它时立即调用回调。
关于javascript - 在 IE 9 中设置对象 "Object doesn' t 支持此操作”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283892/