我正在使用外观模式构建一个 JS 框架,但我遇到了范围问题。在我执行多个方法时在 html 端。第二种方法失败,因为第一种方法尚未完成。我试过 jquery 没有运气,我想我可能必须修改 JS 的模式来完成这个,但是在对象被实例化后是否可以使函数可用?
我的猜测是将模式更改为模块,但我不确定,在进入第 100 万个兔子洞之前,问一下似乎是明智的......谢谢
<script type="text/javascript" src="">
foo.doFirst('#id');
foo.availableSecond('#hooray');
</script>
编辑:
foo.doFirst(); 这调用了一系列嵌套在 'foo' 中的函数。最重要的是对象是在内部创建的。特别是 foo.Layers; 这是一个对象数组
foo.doSecond(); 这需要在foo.doFirst(); 中创建的对象数组;解析并执行另一个函数。
要注意。如果我单独执行第一个方法,应用程序会加载,在页面加载后我可以调用第二个方法并且它可以干净地执行。这就是让我觉得我需要强制第二种方法等到第一种方法完成的原因。
第二次编辑:** 下面是我的延迟尝试。**目标:在执行之前定义“jen.infLayers”
第三次编辑: foo.doFirst() = jen.doFirst(); jen 对象被实例化, jen.infLayers 被实例化为一个数组,在实例化对象被推入其中之后。所有这些都需要在 jen.doSecond() 调用的函数之前发生,如果标题匹配,它将循环并为应用程序加载一个新对象。
function addLayer(opt) {
$.when(jen.infLayers).done(function() {
for (var i = 0; i < jen.infLayers.length; i++) {
if (jen.infLayers[i].title === opt) {
setLayer({
url: jen.infLayers[i].url,
title: jen.infLayers[i].title,
visible: jen.infLayers[i].visible,
img: jen.infLayers[i].img,
lyrType: jen.infLayers[i].lyrType
});
}
}
});
}