保持这种连接的标准方法是使用闭包。
例如,如果你写
function make_timer()
{
var x = document.createElement("div");
var count = 0;
setInterval(function(){
count += 1;
x.textContent = count;
}, 1000);
return x;
}
每次调用make_timer都会创建一个独立的 DOM 节点,其中的内容每秒都会递增。但是计时器回调如何记住需要递增的节点呢?答案是传递给的setInterval确实不是一个函数而是一个闭包,即一个函数加上一些变量(count在x这种情况下)。
像 Java 或 C++ 这样的语言没有这个概念,但发生的情况是创建的函数,如果它们来自外部范围,它也被称为“捕获”局部变量,即使外部范围内它也会保持它们“活着”导致它们结束的函数结束(即当函数make_counter退出时)。
同样可以用于 ajax 请求。您通常所做的只是将窗口对象传递给提交请求的函数,回调闭包将用作完成和错误回调。当答案从服务器返回时,闭包将可以访问相应的窗口对象。
编辑
如果您真的想使用IDs 那么当然可以...在您的示例中,它们存储在一个数组中,因此必须遍历该数组以查找确切的ID...
var windowid=$("#guiid").val();
for (var i=0; i<window_manager.windows.length; i++)
if (window_manager.windows[i].id == windowid)
window_manager.windows[i].gui();
使用对象而不是数组会更好,因为在这种情况下,搜索可以简化为单个类似:
var windowid=$("#guiid").val();
window_manager.windows[windowid].gui();
但是请注意,在许多情况下,Javascript 中不需要数字 ID,因为您可以存储窗口 ID 的位置,而不是存储对窗口对象本身的引用,并且对于回调,不需要复杂的机制来提供上下文(就像在 C++ 或 Java 中是必需的),因为你有闭包。