קורס Front-End Web Development שיעור תרגול מחלקות

הי,

איך אני יודעת האם הקוד שכתבתי תקין?
כשאני רושמת בתוך התרגיל לא מופיע לי כלום בצד של התוצאה

ואז כתבתי את זה בתוך תוכנת BRACATS

function log(msg) {
  p_log.innerHTML += msg + '<br />';
}

function person(name){
  this.name= name;
    this.age = 1;
}

var personPrototype ={};

personPrototype.growUp = function(age){
  this.age += 1;
};

personPrototype.hello = function(){
  return log('My name is' + this.name + 'and I am' + this.age + ' years old');
}
// Fill Code Here

person.prototype = personPrototype;

var p1 = new Person('Mike');
var p2 = new Person('Jim');

// prints: My name is Mike and I am 1 years old
p1.hello();

p1.growUp();

// prints: My name is Mike and I am 2 years old
p1.hello();

// prints: My name is Jim and I am 1 years old
p2.hello();

וגם לא הופיע כלום
מה חסר?

הי,

אני חושב שהבעיה שכתבת בטעות return log במקום console.log, כלומר בתוך הפונקציה hello היה צריך להופיע:

personPrototype.hello = function(){
  console.log('My name is' + this.name + 'and I am' + this.age + ' years old');
}

הי,

פיתרון שלי לתרגיל 1 באמצעות ES6:

function log(msg) {
  p_log.innerHTML += msg + '<br />';
}

// Fill Code Here

class Person {
  constructor(name) {
     this.name   = name;
     this.age = 1;
  }
  
  growUp(age) {
    this.age++;
  }
  
  hello() {
    log ("My name is " + this.name +" and I am " + this.age + " years old");
  }
 
}


var p1 = new Person('Mike');
var p2 = new Person('Jim');

// prints: My name is Mike and I am 1 years old
p1.hello();

p1.growUp();

// prints: My name is Mike and I am 2 years old
p1.hello();

// prints: My name is Jim and I am 1 years old
p2.hello();

עבור תרגיל 2 - גם באמצעות ES6:

function log(msg) {
  p_log.innerHTML += msg + '<br />';
}

// Write Code Here
class Summer {
  constructor () {
    this.sumTotal = 0;
  }
  add (number) {
    this.sumTotal += number;
  }
  getCurrentSum() {
    return (this.sumTotal);
  }
}

var s1 = new Summer();
var s2 = new Summer();

s1.add(10);
s1.add(20);

s2.add(30);

s2.add(5);

// prints 30
log(s1.getCurrentSum());

// prints 35
log(s2.getCurrentSum());
'''
לייק 1

נראה אחלה - שים לב שאחרי return אין צורך בסוגריים כך שעדיף לכתוב פשוט:

return this.sumTotal;

הפתרון שלי לתרגול מחלקות
תרגיל 1:

תרגיל 2:

תרגיל 3:

לייק 1

גדול,

שתי שאלות-

האם אפשר לעדכן את הפונקציה addCars כך שגם הקריאה הזאת תעבוד:

race.addCars(c1);
race.addCars(c2, c3);

ו- מה קורה אם קוראים ל winner לפני שהוספנו מכוניות? האם אפשר לתקן את זה כך שיחזיר null ?

היי ינון, לא כ"כ הבנתי את השימוש בconcat בתרגיל ה3.
הרי זה לא שיש לנו שני מערכים שונים שאנחנו רוצים למזג, יש לנו מערך ריק שלתוכו אנחנו רוצים לעשות Push למכוניות השונות.

האם זה בסדר לרשום:

addCars(...cars){
this.carList.push(...cars);

{

הי,
כן כאן זה בסדר גמור

באופן כללי שווה לזכור ש concat מייצר מערך חדש, ו push מוסיף דברים על המערך הקיים. בשאלה הזאת שתי האופציות עובדות טוב אבל לפעמים כן יהיה חשוב לנו לבחור באחת הגישות

היי,

קראתי בדוקומנטציה על reduce אך בשורה הבאה:
this.maxCar = newList.reduce((prev,cur)=>cur.speed > prev.speed ? cur :prev );
אני לא מבין איך בדיוק זה עושה לולאה על כל המערך ולא בודק את שני האברים הראשונים או האחרונים?

הפונקציה reduce היא תמיד לולאה על כל המערך. אפשר לדמיין את הקוד שלה כך:

function reduce(array, reducer) {
  let accumulator = array[0];
  for (let i=1; i < array.length; i++) {
    accumulator = reducer(accumulator, array[i]);
  }

  return accumulator;
}
לייק 1

לכאורה, אם שומרים את המקסימום מהשלב שבו נקלטו המכוניות, אם יהיה מאוחר יותר שינוי במהירות מכונית (לדוגמא אם במקום c1.drive(20; בשורה 28, נכתוב c1.drive(60) ) הוא יפתור לא נכון, כלומר הוא לא יחשב אותו כמקסימום, כיון שהבדיקה נעשתה לפני כן.
איך אפשר להוסיף לפונקציה drive חלק שיעדכן את המקסימום בשעת הצורך (המקסימום אצלי שייך למחלקה race ולא למחלקת car)