JavaScript-有没有办法动态创建对象的新实例?

JavaScript-有没有办法动态创建对象的新实例?,javascript,javascript-objects,Javascript,Javascript Objects,我正在从事一个小项目,在这个项目中,我需要使用表单字段数据创建对象。简而言之,我有一个构造函数,它从每个表单字段中检索值,如下所示: var Task = function() { this.title = document.getElementById("task-title").value; this.date = document.getElementById("task-date").value; this.option = document.getElementById("

我正在从事一个小项目,在这个项目中,我需要使用表单字段数据创建对象。简而言之,我有一个构造函数,它从每个表单字段中检索值,如下所示:

var Task = function() {
  this.title = document.getElementById("task-title").value;
  this.date = document.getElementById("task-date").value;
  this.option = document.getElementById("task-option").value;
}
我需要的是每次有人单击submit按钮时创建一个新的object实例。到目前为止,我得到的是:

var submitBtn = document.getElementById('#someID');
submitBtn.addEventListener('click', function(event) {
   event.preventDefault();
   var newTask = new Task();           
});
其工作原理是创建一个对象,但每次按下按钮时对象都会被覆盖。我需要在每次按下按钮时创建一个新的对象实例


这可能吗?如果没有,是否有更可行的替代构造函数的方法?非常感谢。

这是因为您总是将值放在同一个变量中,您需要使用对象创建一个数组,这样您就不会丢失旧对象

var submitBtn = document.getElementById('#someID');
var newTask = [];
submitBtn.addEventListener('click', function(event) {
   event.preventDefault();
   newTask.push(new Task());           
});

这是因为你总是把值放在同一个变量中,你需要用你的对象做一个数组,这样你就不会丢失你的旧对象

var submitBtn = document.getElementById('#someID');
var newTask = [];
submitBtn.addEventListener('click', function(event) {
   event.preventDefault();
   newTask.push(new Task());           
});

您正在enventlistener中定义newTask变量,然后立即将新任务分配给它。您的代码正在执行您让它执行的所有操作。也就是说,创建一个新变量并为其分配一个新的task实例。函数结束后,newTask将被销毁,因为不再需要执行任何操作,代码中没有其他地方可以访问它

你为什么不试试这个呢:

var submitBtn = document.getElementById('#someID');
var myTasks = [];
submitBtn.addEventListener('click', function(event) {
  event.preventDefault();
  myTasks.push(new Task());           
});

您正在enventlistener中定义newTask变量,然后立即将新任务分配给它。您的代码正在执行您让它执行的所有操作。也就是说,创建一个新变量并为其分配一个新的task实例。函数结束后,newTask将被销毁,因为不再需要执行任何操作,代码中没有其他地方可以访问它

你为什么不试试这个呢:

var submitBtn = document.getElementById('#someID');
var myTasks = [];
submitBtn.addEventListener('click', function(event) {
  event.preventDefault();
  myTasks.push(new Task());           
});

使用var Task=function(){}本身就是一个单例和实例。如果需要多个实例,请创建一个函数Task(){},并像var Task=new Task()一样声明它<代码>新任务()将始终创建一个新对象。“对象被覆盖”是什么意思?你到底在用新任务做什么?@a.j.:
var Task=function(){}
function Task(){}
是一回事。OP也正在执行
new Task()
。您每次单击都在创建一个新实例。在它超出范围之前,您永远不会对它做任何事情。使用var Task=function(){}本身就是一个单例和实例。如果需要多个实例,请创建一个函数Task(){},并像var Task=new Task()一样声明它<代码>新任务()将始终创建一个新对象。“对象被覆盖”是什么意思?你到底在用新任务做什么?@a.j.:
var Task=function(){}
function Task(){}
是一回事。OP也正在执行
new Task()
。您每次单击都在创建一个新实例。约翰尼·约翰,谢谢你的回复,它工作得很好@RobbyD和你差不多在同一时间给了我同样的答案。他没有那么多答案,所以为了公平起见,我把答案给了他。谢谢你抽出时间。约翰尼·约翰,谢谢你的回复,它工作得很好@RobbyD和你差不多在同一时间给了我同样的答案。他没有那么多答案,所以为了公平起见,我把答案给了他。谢谢您抽出时间。谢谢您好心的先生!工作起来很有魅力。您和@Johnny John同时回复,但正如我在对他的评论中所提到的,我将把它交给您,因为您的个人资料中的提问较少。谢谢你,祝你今天愉快!谢谢你,好心的先生!工作起来很有魅力。您和@Johnny John同时回复,但正如我在对他的评论中所提到的,我将把它交给您,因为您的个人资料中的提问较少。谢谢你,祝你今天愉快!