2017-10-17 1 views
5

Ich versuche, meine eigene Erinnerungs-App mit Javascript zu erstellen, also kann ich im Grunde eine Reihe von Erinnerungen wie eine Kategorie (Arbeit, Schule, Programmierung Erinnerungen, usw.) erstellen. Und jedes von diesen kann ihre Mahnungen wie auf der Arbeitskategorie haben, ich kann Liste von Mahnungen dort haben und so weiter. Ich möchte auch die Sets und ihre Erinnerungen in einem lokalen Speicher speichern und sie auf der Seite erneut erstellen. Natürlich sollte die Liste der Erinnerungen auf dem Set sein, zu dem sie gehört.Wie diese Objekte zwei Konstruktoren richtig zuordnen?

Bevor ich die Seite will ich wirklich diese erste modellieren und ich beschlossen, auf OOP-Ansatz als eine Praxis zu gehen, und ich bin, herauszufinden, wie sie hier zu assoziieren, was ich so weit gekommen ..

var ReminderSet = function(set){ 
     this.set = set; //could be work, school , etc 

    } 


    var Reminders = function(new_reminder){ 
     this.reminders = new_reminder; // a new reminder 
    } 

    ReminderSet.prototype.reminders = new Reminders(); 

    ReminderSet.prototype.printSet = function(){ 
     console.log(this.set, this.reminders); /* gives the ff output 
work { reminders: 'finish task on time' } 
school { reminders: 'study on chem' }*/ 
    } 

    var workReminders = new ReminderSet("work"); // create a new set of reminder 
    var schoolReminders = new ReminderSet("school"); // create a new set of reminder 

    workReminders.reminders = new Reminders("please the boss"); //add a new reminder to work 
    workReminders.reminders = new Reminders("finish task on time");//add a new reminder to work 
    schoolReminders.reminders = new Reminders("finish projects"); //add new reminder to school 
    schoolReminders.reminders = new Reminders("study on chem"); //add new reminder to school 

    workReminders.printSet(); 
    schoolReminders.printSet(); 

Das Problem ist es wird nicht lassen Sie mich mehr als eine Erinnerung für das Set erstellen, ich hoffe, Sie können mir mit diesem Dankeschön helfen! Nur um klar zu sein, ich habe nur JavaScript für 3 Monate gelernt und dies ist mein erstes Mal, oop zu tun, obwohl ich einige vorherige Aufgabe Projekte gemacht habe, aber ich denke, es ist wichtig, sich mit oop wirklich vertraut zu machen.

Antwort

0

Der Grund, warum Sie sind jeder Art sein, Sie können nur eine Erinnerung hinzufügen, weil Sie keine Sammlung von Erinnerungen erstellen. Jedes Mal, wenn Sie die neue Erinnerung einrichten, überschreiben Sie die vorherige Erinnerung.

Ich habe den Code neu geschrieben Sie ein wenig geschrieben, um zu verwenden, was ich glaube, sind intuitivere Eigenschaftennamen, sondern auch eine Sammlung von Erinnerungen in jedem ReminderSet zu bauen.

var ReminderSet = function (name) { 
 
    this.name = name; 
 
    this.reminders = []; 
 
} 
 

 
ReminderSet.prototype.add = function (reminder) { 
 
    this.reminders.push(reminder); 
 
    return this; 
 
} 
 

 
ReminderSet.prototype.list = function() { 
 
    console.log(this.reminders); 
 
} 
 

 
var Reminder = function (description) { 
 
    this.description = description; 
 
} 
 

 

 
var work = new ReminderSet('work') 
 
    .add(new Reminder('Get to work on time!')) 
 
    .add(new Reminder('Finish all my work!')); 
 

 
var school = new ReminderSet('school') 
 
    .add(new Reminder('Finish my coursework')) 
 
    .add(new Reminder('Study for my exams!')); 
 

 
work.list(); 
 
school.list();

+0

ich wirklich froh, für die Namensgebung es wirklich einfach danke zu verstehen! –

0

Versuchen Sie dies, indem Sie die Funktionen als Vorlage verwenden, die beim Erstellen neuer Instanzen ausgefüllt werden, anstatt sie zu einer eigenen Variablen zu machen.

function ReminderSet(set){ 
     this.set = set; //could be work, school , etc 

    } 


    function Reminders(new_reminder){ 
     this.reminders = new_reminder; // a new reminder 
    } 

    ReminderSet.prototype.reminders = new Reminders(); 

    ReminderSet.prototype.printSet = function(){ 
     console.log(this.set, this.reminders); /* gives the ff output 
work { reminders: 'finish task on time' } 
school { reminders: 'study on chem' }*/ 
    } 

    var workReminders = new ReminderSet("work"); // create a new set of reminder 
    var schoolReminders = new ReminderSet("school"); // create a new set of reminder 

    workReminders.reminders = new Reminders("please the boss"); //add a new reminder to work 
    workReminders.reminders = new Reminders("finish task on time");//add a new reminder to work 
    schoolReminders.reminders = new Reminders("finish projects"); //add new reminder to school 
    schoolReminders.reminders = new Reminders("study on chem"); //add new reminder to school 

    workReminders.printSet(); 
    schoolReminders.printSet(); 
0

Sie ein Array als Eigenschaft von class festlegen und ein Objekt verwenden, in dem Eigenschaftsnamen Erinnerung Name und der Wert ist, kann

class Reminders { 
 
    constructor() { 
 
    this.reminders = []; 
 
    } 
 
    setReminder(key, prop) { 
 
    const reminder = { 
 
     type: key, 
 
     value: prop 
 
    }; 
 
    this.reminders.push(reminder); 
 
    return this; 
 
    } 
 
    getReminder(key) { 
 
    return this.reminders.filter(({type}) => type === key) 
 
    } 
 
} 
 

 
let reminders = new Reminders() 
 

 
reminders.setReminder("work", ["a", "b"]); 
 

 
let work = reminders.getReminder("work"); 
 

 
reminders.setReminder("school", "study") 
 

 
let school = reminders.getReminder("school"); 
 

 
reminders.setReminder("do stuff", "stuff") 
 

 
let stuff = reminders.getReminder("do stuff"); 
 

 
for (let [{type, value}] of Object.values([work, school, stuff])) { 
 
    console.log(`reminder type:${type}, reminder value:${value}`) 
 
}

Verwandte Themen