[英]creating instances dynamic javascript
我有一些方法的功能。
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。
我认为如果您创建某种窗口管理器来管理您创建的窗口,则发送和处理请求可能更容易。 就像是:
在示例中,如果有必要,您可以使用id
属性。 否则,如果您在调用sendRequest
时跟踪引用,您应该能够在正确的acpwindow
上执行您想要的acpwindow
保持这种连接的标准方法是使用闭包 。
例如,如果你写
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请求。 你通常做的只是将window对象传递给提交请求的函数,回调闭包将用作完成和错误回调。 当答案从服务器返回时,闭包将访问相应的窗口对象。
如果你真的想使用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中是必需的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.