Я получил это упражнение 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);
Внутри функции 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
:)
person.pay - person.pay
, очевидно, всегда0
, поскольку вы вычитаете значение из самого себя.