Метод класса JS — обмен значениями между экземплярами

#javascript #class #methods #swap

Вопрос:

Узнав о занятиях, я заметил интересное явление, не могли бы вы объяснить, пожалуйста, как это происходит. В классе Infected я объявил функцию infect(кто-то). В моем примере Марии.инфекция(Джон) — хотя я понимаю, что Мэри заражается (Мэри-это объект, я вызываю функцию, Мэри-объект, в настоящее время я работаю, меняется Марии стоимости имущества), я не понимаю, как Джон заражается от Мэри (Иоанна служит лишь аргументом в текущем вызове функции).

Другими словами: mary.заразить(джон)я вызываю эту функцию » от «объекта Мэри (мэри-это «этот» объект), так что же здесь происходит, что я могу изменить значение болезней Джона?

Я думал так: если я использую джона просто как параметр (аргумент) в вызове функции мэри, все, что я могу сделать, это извлечь определенные значения из джона (например, его болезни), но я не ожидал, что смогу в тот же момент получить доступ к Джону и изменить значения джона. Просто мне это показалось немного нелогичным.

Здорово, что мы можем вот так обмениваться значениями между двумя объектами. Но я не понимаю, как это работает.

 class Infected {  constructor(name, diseases) {  this.name = name;  this.diseases = diseases;  }  infect(somebody) {  const thisDiseases = this.diseases;  this.diseases = this.diseases.concat(somebody.diseases);  somebody.diseases = somebody.diseases.concat(thisDiseases);  } }  const mary = new Infected('Mary', ['herpes', 'hepatitis']); const john = new Infected('John', ['flu', 'syphilis']); mary.infect(john); mary.diseases -gt; ['herpes', 'hepatitis', 'flu', 'syphilis'] john.diseases -gt; ['flu', 'syphilis', 'herpes', 'hepatitis']  

Комментарии:

1. Когда вы передаете john в качестве аргумента, вы фактически передаете ссылку на объект, а не копию. Оба john и somebody указывают на один и тот же объект в памяти, поэтому изменение somebody в infect отражается и в john ссылке.