Объекты и сравнение в Javascript, как передать значение в метод

Я получил это упражнение Javascript. Я не мог понять, как передать значение оплаты каждого человека в метод «comparePay». Буду рад, если вы поможете мне в этом.

Заранее спасибо.


Создайте 3 объекта Person с атрибутами «имя», «профессия» и «оплата», а также метод «comparePay(person)», который сравнивает значения оплаты объекта, вызывающего его, и объекта, переданного ему в качестве аргумента. , затем распечатать результат:

[name of object calling the method] earns [difference] more than [other's name]
[name of object calling the method] earns [difference] less than [other's name]
[name of object calling the method] earns as much as [name]

Объекты должны иметь следующие значения:

Michael, JS-programmer, 5000
Lena, Python-programmer, 1500
Brad, Teacher, 800

Вывод должен быть таким.↓

First person's name: Michael
Second person's job: Python-programmer
Third person's pay: 800
    
Michael earns 3500 more than Lena
Brad earns 700 less than Lena
Brad earns as much as Brad

Вот что я сделал до сих пор.

 function Person(name, occupation, pay) {
      this.name = name;
      this.occupation = occupation;
      this.pay = pay;
     this.comparePay = function(person) { /* compare the value of the pay */
         var difference = person.pay - person.pay;
         if (difference > 0) {
             return person.name + " earns " + difference + " more than " + person.name;
         } else if (difference === 0) {
             return person.name + " earns as much as " + person.name;
         } else {
             return person.name + " earns " + Math.abs(difference) + " less than " + person.name;
         } 
        };
     }

    person1 = new Person("Michael", "JS-programmer", 5000);
    person2 = new Person("Lena", "Python-programmer", 1500);
    person3 = new Person("Brad", "Teacher", 800);

а тут готовый код, так что их редактировать нельзя.

console.info("First person's name: " + person1.name);
console.info("Second person's job: " + person2.occupation);
console.info("Third person's pay: " + person3.pay + "\n");

person1.comparePay(person2);
person3.comparePay(person2);
person3.comparePay(person3);
person.pay - person.pay, очевидно, всегда 0, поскольку вы вычитаете значение из самого себя.
connexo 06.05.2022 14:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Внутри функции this.comparePay вы должны использовать this для доступа к свойствам объекта:

this.pay, this.name и т. д.

this.comparePay = function(person) { 
  var difference = this.pay - person.pay;
  ...
}

function Person(name, occupation, pay) {
      this.name = name;
      this.occupation = occupation;
      this.pay = pay;
     this.comparePay = function(person) { /* compare the value of the pay */
         var difference = this.pay - person.pay;
         if (difference > 0) {
             return this.name + " earns " + difference + " more than " + person.name;
         } 
         if (difference === 0) {
             return this.name + " earns as much as " + person.name;
         } 
         return this.name + " earns " + Math.abs(difference) + " less than " + person.name;
        };
     }

person1 = new Person("Michael", "JS-programmer", 5000);
person2 = new Person("Lena", "Python-programmer", 1500);
person3 = new Person("Brad", "Teacher", 800);

console.info(person1.name);
console.info(person1.pay);
console.info(person2.name);
console.info(person2.pay);
console.info(person3.name);
console.info(person3.pay);

console.info( person1.comparePay(person2) );
console.info( person3.comparePay(person2) );
console.info( person2.comparePay(person1) );
console.info( person3.comparePay(person3) );

Советы: вы также можете удалить операторы else/if, поскольку вы возвращаетесь внутри операторов if. Совет Paulic-crtn также важен, поэтому старайтесь придерживаться let/const при объявлении переменных в JS.

Я думаю, что проблема связана с вашим сравнением (вы сравниваете одни и те же атрибуты объекта). Вы хотите сравнить объект, переданный в аргументе функции, с текущим объектом.

Так что я думаю, вы можете попробовать заменить

var difference = person.pay - person.pay;

с:

const difference = this.pay - person.pay;

То же самое для

return person.name + " earns " + difference + " more than " + person.name;

должно быть

return this.name + " earns " + difference + " more than " + person.name;

В противном случае он вернет те же имена. Вы также можете использовать нотацию шаблонных литералов

return `${this.name} earns ${difference} more than ${person.name}`;

Надеюсь, это имеет смысл. Также не забудьте использовать let или const вместо var :)

Другие вопросы по теме