在javascript中使用原型设计是否会对ajax调用和异步代码产生负面影响
Does the use of prototyping in javascript have a negative effect on ajax calls and asynchronous code?
如果我添加了以下对象和原型功能。
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 函数在对象的所有实例之间共享的事实是否会导致以下问题:例如,如果 20 个对象一起创建并立即调用此函数,则将哪些数据分配给哪个 id?
如果是这种情况,将异步方法放在对象构造函数中是否有意义?
如果创建 20 个对象并调用 ajaxcall 函数会发生什么?很少。ajax 调用将以异步方式运行。完成后,它们将排队,以便在主线程上的当前运行操作完成时在主线程上运行。
因此,下次有时间时,回调函数会在队列中同步运行。这里不会发生任何不好的事情。
我不明白你关于构造函数的问题。这会改变什么?如果您使用 Hello 对象,它们有一个实例变量。这包含在回调闭包中。创建新函数不会更改另一个回调函数中的值。
如果您使用相同的ID,则当文本更改时,内容可能会闪烁,并且您不知道最后会运行哪个回调,但这是可能发生的最糟糕的事情。
应该没有问题。 您使用 20 种不同的id
调用该函数 20 次不同的时间。
不过从概念上讲。 我不明白为什么这是你对象的一部分。 该函数根本不使用对象本身的任何内容。
这个特定的例子会起作用。你的函数不使用任何实例变量,所以以这种方式声明它并没有真正的意义,但把它移到构造函数中就更没有意义了。它仍然可以工作,因为 id 参数不会在调用之间共享。
编辑:所以现在你已经改变了它,以便它确实使用了一个实例变量,你的语法是错误的,它需要
{parameter : this.input}
但除此之外,它仍然有效。异步行为对于所示代码来说不是问题。
- 如果在'/'执行此函数的途径是可以异步执行此代码
- 使用模态库从嵌套的异步调用中生成javascript同步代码
- 如何从一系列级联异步代码中返回值
- 要按顺序执行的异步代码
- 谷歌分析-升级到异步代码
- 基准测试引发错误的异步与同步代码
- 如何在node.js和MongoDb中混合javascript中的同步和异步代码
- 使用异步代码引发/捕获错误的替代方法
- 使我的异步代码与setTimeout同步.我需要承诺吗
- Node.js:异步代码 + js 闭包的问题
- Meteor - 在客户端上的异步回调的 for 循环后运行代码
- JavaScript代码的异步执行
- 用外行的术语理解异步代码
- 异步.js中第 169 行和第 171 行之间的代码块是什么意思
- 我怎样才能异步执行 JavaScript 代码片段并等待它们的结果
- 在应用程序框架中处理异步 Javascript 代码的最佳实践
- 如何在不出现异步错误的情况下加载 Gist 代码
- 解析云代码:如何调用异步保存的承诺
- 以编程方式将同步代码转换为异步代码
- 如果“beforeEach”中的代码是异步的,如何在 Jasmine 中测试方法