2017-10-17 74 views
5

Tôi đang cố tạo ứng dụng lời nhắc của riêng mình bằng javascript, vì vậy về cơ bản tôi có thể tạo một bộ nhắc nhở như một danh mục (công việc, trường học, nhắc nhở lập trình, v.v.). Và mỗi điều này có thể có lời nhắc của họ như trên loại công việc tôi có thể có danh sách các lời nhắc ở đó và như vậy. Tôi cũng muốn lưu các bộ và nhắc nhở của họ trên một localstorage và tạo lại chúng trên trang. Tất nhiên danh sách các lời nhắc phải nằm trong tập hợp nó thuộc về.Làm cách nào để liên kết đúng đối tượng này với hai hàm tạo?

Trước khi tôi làm trang tôi thực sự muốn để mô hình này đầu tiên và tôi quyết định đi trên cách tiếp cận oop như một thực tế và tôi đang tìm hiểu làm thế nào để kết hợp chúng ở đây là những gì tôi có cho đến nay ..

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(); 

Vấn đề là nó sẽ không cho phép tôi tạo ra nhiều hơn một lời nhắc cho bộ này, tôi hy vọng bạn có thể giúp tôi với điều này cảm ơn bạn! Chỉ cần được rõ ràng tôi chỉ được học javascript trong 3 tháng và đây là lần đầu tiên tôi làm oop mặc dù tôi đã thực hiện một số dự án nhiệm vụ trước đó nhưng tôi nghĩ rằng điều quan trọng là thực sự làm quen với oop.

Trả lời

0

Lý do bạn chỉ có thể thêm một lời nhắc duy nhất là vì bạn không xây dựng bộ sưu tập lời nhắc. Mỗi khi bạn đặt lời nhắc mới, bạn sẽ ghi đè lời nhắc trước đó.

Tôi đã viết lại mã bạn đăng một chút, để sử dụng những gì tôi cho là tên thuộc tính trực quan hơn, nhưng cũng để xây dựng bộ sưu tập nhắc nhở trong mỗi ReminderSet.

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

tôi thực sự vui mừng cho đặt tên nó thực sự dễ hiểu cảm ơn bạn! –

0

Hãy thử điều này, sử dụng các chức năng làm mẫu để điền vào khi tạo các phiên bản mới của nó, thay vì biến chúng thành biến riêng của chúng.

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

Bạn có thể thiết lập một mảng như tài sản của class và sử dụng một đối tượng mà tên thuộc tính là tên nhắc nhở và giá trị có thể là bất kỳ kiểu

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}`) 
 
}

Các vấn đề liên quan