2016-04-28 22 views
0

私はフォームフィールドデータでオブジェクトを作成する必要がある小さなプロジェクトに取り組んでいます。要するに、私はこのような各フォームフィールドから値を取得するコンストラクタ関数を持っている:JavaScript - オブジェクトの新しいインスタンスを動的に作成する方法はありますか?

var Task = function() { 
    this.title = document.getElementById("task-title").value; 
    this.date = document.getElementById("task-date").value; 
    this.option = document.getElementById("task-option").value; 
} 

何が必要たびに誰かが送信ボタンをクリックしたオブジェクトの新しいインスタンスを作成することです。私は今までこれを持っています:

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

これはオブジェクトを作成するが、ボタンを押すたびにオブジェクトがオーバーライドされるという点で機能します。ボタンが押されるたびに作成されるオブジェクトの新しいインスタンスが必要です。

これは可能ですか?そうでない場合は、コンストラクタ関数の実行可能な代替手段がありますか?どうもありがとうございます。

+1

なぜこれを試していけません。複数のインスタンスが必要な場合は、関数Task(){}を作成し、var task = new Task()のように宣言してください。 –

+2

Uh? 'new Task();'は常に新しいオブジェクトを作成します。 「オブジェクトがオーバーライドされる」とはどういう意味ですか? 'newTask'で何をしていますか? –

+2

@ a.j .: 'var Task = function(){}'と 'Function Task(){}'は同じものです。 OPはすでに 'new Task()'もやっています。 –

答えて

1

を失うことはありませんので、あなたはその付けたnewtask変数を定義している、あなたのオブジェクトで配列を作る必要があります。 enventlistener内で新しいタスクをすぐに割り当てます。あなたのコードは、あなたがするように言ったすべてのことをしています。つまり、新しい変数を作成し、タスクの新しいインスタンスを割り当てます。関数が終了した後は、もう何もすることがないので、newTaskが破棄され、コード内のどこにも到達することができません。 (){}自体でシングルトンインスタンスであるVARタスク=関数を用い

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

ありがとうございました!魅力のように動作します。あなたと@ジョニー・ジョンは同時に答えましたが、私のコメントで彼に言及したように、私はあなたのプロフィールに少数の貧困層があるので、私はあなたにそれを与えています。ありがとう。良い一日を! –

1

あなたが常に同じVarの値を入れているためだ。つまり、あなたがあなたの古いオブジェクト

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

Johnny John、あなたの返事をありがとう、それは美しく働いた。 @RobbyDはあなたと同じくらいまさに私に同じ答えをくれました。彼は答えが少ないので、公平にするために私は彼にそれを与えている。時間を割いていただきありがとうございます。 –

関連する問題