Oto mój blok kodu, oczywiście dość prosty. Samodzielne uczenie się, ale dotarcie do celu! Próbuję dowiedzieć się, jak porównać dwa obiekty, które utworzyłem z mojego konstruktora. Ale funkcja nie działa. Nie jestem pewien, jak wyzwolić właściwość w obiektach. Czy brakuje mi tutaj podstawowej wiedzy?
Nie chcę brzmieć tandetnie, ale dziękuję wszystkim za dzielenie się i pomaganie innym - ludzkości. Dostępnych jest tak wiele informacji, a to dzięki tobie. Ostatecznym celem wiedzy jest dzielenie się nią.

function rectangle (length,breadth,colour){

    this.length= length;
    this.breadth= breadth;
    this.colour= colour;
    this.area= function(){
        return this.length * this.breadth;
    }  /**The property (area) value is a function.**/
}
var Rectangle1 = new rectangle (5,3.5,"Green");

var Rectangle2 = new rectangle (7, 5.5, "Green");
function compareRectangles (Rectangle1, Rectangle2){

/**How can I target the property "area" within 'if' statement? or Did I get it all wrong?**/

   if (Rectangle1 > Rectangle2){

   return console.log(Rectangle1 + " is greater than Rectangle2 ");
     }

   else  if (Rectangle1 < Rectangle2) {

     return console.log(Rectangle2 + "is greater than Rectangle1");
   }
   else {
     return console.log("They're same size");
   }
}
 compareRectangles(Rectangle1, Rectangle2);
0
Jefferson Matamba 3 kwiecień 2020, 06:47

4 odpowiedzi

Najlepsza odpowiedź

Weź pod uwagę następujące kwestie (dodane dodatkowe komentarze dotyczące Twojego doświadczenia w nauce):

// capitalized Rectangle here to indicate it's a class (convention)
function Rectangle (length,breadth,colour){

  this.length = length;
  this.breadth = breadth;
  this.colour = colour;

  // removed quotes around area here
  this.area = function () { 
    return this.length * this.breadth;
  }

// removed the ; after the } as it's not necessary after function declarations
}

// renamed Rectangle to rectangle1 to align with what you use in the function
// also lowercased the variables because they're instances of a class and not the class constructor itself
function compareRectangles (rectangle1, rectangle2){
  // check the .area method of the rectangle
  // you can access properties and methods through a dot
  // since area is a function, you need to execute with () to get the return value
  if (rectangle1.area() > rectangle2.area()){
    // changed console logs to not use the instance in the log.
    // Since the instance is an object it would try to parse it as a string, resulting in showing [Object object] or something like that
    // if you do want to log the rectangle, you should probably split that by adding an argument:
    // console.log("the greater rectangle is:", rectangle1);
    console.log("Rectangle1 is greater than Rectangle2");
    // I changed your return value, since console.log returns nothing
    // I figured it would be more relevant to return the 'winning' rectangle
    return rectangle1;
  }
  else if (rectangle1.area() < rectangle2.area()) {
    console.log("rectangle2 is greater than rectangle1");
    return rectangle2;
  }
  else {
    console.log("They're same size");
    // no winning rectangle makes it return null, so you can recognize it when calling the function
    return null;
  }
}

// Removed capitals for the variables as they are not class constructors but instances of the class.
// Also changed this to let instead of var,
// you may want to read up on const/let and try to forget about the existence of var
// Currently these could be const since they are never reassigned, but I can imagine it is easier for you currently to stick to let instead
let rectangle1 = new Rectangle (5,3.5,"Green");
let rectangle2 = new Rectangle (7, 5.5, "Green");

// you'll need to 'send over' the rectangles that you're expecting in your function
let returnedValue = compareRectangles(rectangle1, rectangle2);
console.log('Received return value:', returnedValue);
0
KrekkieD 3 kwiecień 2020, 04:11

Porównując ich własność powierzchni, użyj

Rectangle1.area(); //Notice the (), because you wanted to call that function in the...
Rectangle2.area(); //...code

Samo użycie Rectangle1 > Rectangle2 porówna je jako obiekty . Te same w sobie nie mogą być normalnie porównywane za pomocą > i <. Musisz porównać je z jakąś ich własnością, co wiem, że próbujesz zrobić. Ale spójrz na swój kod.

if (Rectangle1 > Rectangle2){
   return console.log(Rectangle1 + " is greater than Rectangle ");
}

Umieszczasz tylko Rectangle1 po lewej stronie operatora. To jest przedmiot. Aby uzyskać dostęp do jego właściwości, na przykład length, użyj Rectangle1.length Zrób więc to samo, aby uzyskać dostęp do funkcji area, Rectangle1.area, a zatem wywołaj funkcję przez Rectangle1.area().

if (Rectangle1.area() > Rectangle2.area()){
   return console.log(Rectangle1 + " is greater than Rectangle2 ");
}

Zasadniczo wystarczy użyć składni:

obiekt . właściwość

0
Kino Bacaltos 3 kwiecień 2020, 04:05

Ponieważ właściwość jest funkcją, musisz ją wywołać Rectangle1.area()

Musisz także wywołać funkcję compareRectangles() i przekazać dwa utworzone prostokąty:

function rectangle (length,breadth,colour){
     this.length = length;
     this.breadth = breadth;
     this.colour = colour;
     this.area = function(){
         return this.length * this.breadth;
     }  
};
function compareRectangles(r1, r2){
    if (r1.area() > r2.area()){
        return console.log("Rectangle 1 is greater than Rectangle 2");
    } else  if (r1.area() < r2.area()) {
        return console.log("Rectangle 2 is greater than Rectangle 1");
    } else {
        return console.log("They're same size");
    }
};

var Rectangle1 = new rectangle (5,3.5,"Green");
var Rectangle2 = new rectangle (7, 5.5, "Green");
compareRectangles(Rectangle1, Rectangle2)

Wynik:

Rectangle 2 is greater than Rectangle 1
0
Grand Phuba 3 kwiecień 2020, 04:09

Wystarczy wywołać metodę area() na obiekcie, aby uzyskać wartość

function compareRectangles (Rectangle1, Rectangle2){

   if (Rectangle1.area() > Rectangle2.area()){

   return console.log("Rectangle1 is greater than Rectangle2");
     }
   else  if (Rectangle1.area() < Rectangle2.area()) {
     return console.log("Rectangle2 is greater than Rectangle1");
   }
   else {
     return console.log("They're same size");
   }
}

Wywołaj funkcję z wymaganymi argumentami

compareRectangles(Rectangle1, Rectangle2);

(Twoje pytanie zostało poprawione. Przeanalizuj swoje pytanie, aby zobaczyć popełnione błędy)

0
Sumanth Yedoti 3 kwiecień 2020, 04:25