首页 > 解决方案 > JS 类方法 - 在实例之间交换值

问题描述

学习类我注意到一个有趣的现象,你能解释一下它是怎么发生的。在Infected类中,我声明了一个函数infect(somebody)。在我的mary.infect(john)示例中- 虽然我知道 Mary 被感染了(mary 是我正在调用函数的对象,mary 是我当前正在处理的对象,正在更改 mary 的属性值),但我不知道' 不明白 John 是如何被 Mary 感染的(john 只是当前函数调用中的一个参数)。

换句话说:mary.infect(john) -我将这个函数称为 'from' mary object (mary is 'this' object),所以这里发生了什么样的魔法让我能够改变 John's disease 的值也?

我的想法是:如果我在对 mary 的函数调用中仅使用 john 作为参数(参数),我所能做的就是从 john 中提取某些值(如他的疾病),但我没想到我可以同时访问 john 并更改 john 的值。这对我来说似乎有点违反直觉。

很酷,我们可以像这样在两个对象之间交换值。但我不明白它是如何工作的。

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 ->  ['herpes', 'hepatitis', 'flu', 'syphilis']
john.diseases -> ['flu', 'syphilis', 'herpes', 'hepatitis']

标签: javascriptclassmethodsswap

解决方案


推荐阅读