javascript - 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']
解决方案
推荐阅读
- ruby-on-rails - 在 Rails 中连接 API 时存储 JWT 的位置
- firebase - 如何在同一用户消息中多次添加battery_cost_change和firebase中的计数器值,即LM2JKCacawaW7tlK4yK
- javascript - 我可以让 Obect 属性调用一个函数吗
- jquery - 仅显示单击的 div,带切换
- c++ - C++ 向量初始化遗传算法的代理向量
- python - django 中的 post_save 信号 DecimalField 变为 float 类型
- javascript - prismjs:突出显示单个单词
- tfs - 让@Mention 在 TFS 2017.3 上使用 TFS 扩展
- c - C 创建 RSA 密钥对时的警告 - 随机:未初始化的 urandom 读取(读取 32 个字节)
- python - Python 计数转换并将日期聚合到月份列