0

我有一些方法的功能。

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,并且相同的 UUID 将在响应中返回。

4

2 回答 2

1

我认为如果您创建某种窗口管理器来管理您创建的窗口,发送和处理请求可能会更容易。就像是:

http://jsfiddle.net/v3T94/1/

在示例中,如果有必要,您可以使用该id属性。否则,如果您在调用时跟踪引用sendRequest,您应该能够在正确的acpwindow

于 2012-10-17T05:58:46.670 回答
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确实不是一个函数而是一个闭包,即一个函数加上一些变量(countx这种情况下)。

像 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 中是必需的),因为你有闭包。

于 2012-10-17T06:20:09.537 回答