我有一些方法的功能。
function acpwindow(){
this.gui=function(){
//some stuff
}
this.update=function(){
//some stuff
}
}
现在我想创建该函数的多个实例。
我有一个创建窗口的按钮。 onclick新窗口将触发;
function createwindow(){
var object1= new acpwindow();
/*
**Here is a problem I have, How to maintain the objects unique.**
*/
}
当用户在windows gui上执行某些操作时,发送到服务器然后服务器的请求将响应这些请求。
现在我的另一个问题是如何根据响应更新特定窗口。
我唯一希望是我会为每个请求生成一个唯一的UUID,并且会在响应中返回。
答案 0 :(得分:1)
我认为如果您创建某种窗口管理器来管理您创建的窗口,则发送和处理请求可能会更容易。类似的东西:
在示例中,如果有必要,您可以使用id
属性。否则,如果您在致电sendRequest
时跟踪参考,您应该能够在正确的acpwindow
答案 1 :(得分:1)
保持此类连接的标准方法是使用闭包。
例如,如果你写
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请求。你通常做的只是将窗口对象传递给提交请求的函数,回调闭包将用作完成和错误回调。当答案从服务器返回时,闭包将可以访问相应的窗口对象。
如果你真的想使用ID
,那么当然你可以......在你的例子中它们存储在一个数组中,因此必须遍历数组才能找到确切的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中一样),因为你有闭包。