创建实例动态javascript

时间:2012-10-17 05:38:30

标签: javascript oop

我有一些方法的功能。

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,并且会在响应中返回。

2 个答案:

答案 0 :(得分:1)

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

http://jsfiddle.net/v3T94/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的内容确实不是函数而是闭包,即函数加上一些变量(countx在这种情况下)。

像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中一样),因为你有闭包。