0

如果我添加了以下对象和原型功能。

function Hello (input){
    this.input = input
}

Hello.prototype.ajaxcall = function(id){ 
    $.get("/ajax/method", {parameter:input}, function(data){ 
        $("#"id).html(data); 
    });
}

如果语法不完全正确,请原谅语法,但它应该做的是获取元素 id,执行 ajax 调用并将 ajax 调用结果分配给 id 的 innerHTML。ajaxcall 函数在对象的所有实例之间共享这一事实是否会导致关于将哪些数据分配给哪个 id 的任何问题,例如,如果一起创建 20 个对象并立即调用此函数?

如果是这种情况,将异步方法放在对象构造函数中是否有意义?

4

3 回答 3

1

如果创建 20 个对象并调用 ajaxcall 函数会发生什么?没什么。ajax 调用将异步运行。当它们完成时,它们会排队,以便在主线程上当前运行的操作完成时它们在主线程上运行。

因此,下次有时间时,回调函数会在队列中同步运行。这里不会发生任何不好的事情。

我不明白你关于构造函数的问题。那会改变什么?如果你使用你的 Hello 对象,它们有一个实例变量。这包含在回调闭包中。创建新函数不会更改另一个回调函数中的值。

如果您使用相同的 ID,则内容可能会在文本更改时闪烁,并且您不知道最后会运行哪个回调,但这是可能发生的最糟糕的事情。

于 2013-09-25T13:59:32.453 回答
1

应该没有问题。您使用 20 个不同id的 s 调用该函数 20 次不同的时间。

不过从概念上讲。我不明白为什么这是你的对象的一部分。该函数根本不使用对象本身的任何东西。

于 2013-09-25T13:55:55.860 回答
0

这个特定的例子会起作用。您的函数不使用任何实例变量,因此以这种方式声明它实际上没有意义,但将其移入构造函数就更没有意义了。它仍然可以工作,因为id参数不会在调用之间共享。

编辑:所以现在你已经改变了它,使它确实使用了一个实例变量,你的语法错误,它需要

{parameter : this.input}

但除此之外,它仍然可以工作。对于所示代码,异步行为不是问题。

于 2013-09-25T13:56:07.483 回答