【问题标题】:association between two classes两个类之间的关联
【发布时间】:2021-12-14 06:29:18
【问题描述】:

我想从其他类调用 virable 及其在类中的值 例子 : 如果我创建一个具有一个属性的医生类医生(名称)

我创建了另一类 practice_doctor ,其属性也为实践医生的名称(p_name)

在执业医生类中,我创建了一个 void 函数,打印执业医生的姓名和在类医生中执业的医生的姓名。

在我在医生类实例中创建的主要方法中,并为他分配了一个名字“杰克” 并在实践医生类的实例中创建并为他分配一个名称,例如“mick” 所以 print info 函数必须打印医生的名字和执业医生的名字 比如“杰克医生是米克医生”

如何在两个班级(医生和执业医生)之间建立联系?

【问题讨论】:

  • 解决方案取决于您的应用架构,您可以将一个类实例声明为另一个类的属性,或者您可以创建第三个类来处理所有医生-实践_医生对,依此类推。
  • 我不完全理解这个概念。 OP最终是否针对真正的执业医生,原因是医生但有两个名字,例如这个人被称为医生杰克,但在练习时听米克?
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • @husseinK ... 在 SO 这被认为是得到帮助的人的一个很好的姿态,提供一些反馈和/或对答案进行投票和/或接受最重要的答案有助于解决 OP 的问题。

标签: javascript reference instance es6-class


【解决方案1】:

下一个提供的示例代码是对 OP 可能想要实现的目标的复杂猜测。

有一个基类Doctor 和一个子类PracticeDoctor,它扩展了前一个基类。并且 OP 所说的关联不在类之间(在这个级别,除了原型的继承链之外没有其他关联)。

但 OP 可能意味着两种类型(医生实例)的关联。在这种情况下,PracticeDoctor 实例将聚合另一个 DoctorPracticeDoctor 实例/类型,例如它自己的associate 属性。

class Doctor {
  constructor(
    // assure default `name` value.
    name = 'unkown',
  ) {
    this.name = name;
  }
}

class PracticeDoctor extends Doctor {
  constructor(
    // default value handling via super.    
    name,
    // assure default `associate` value.
    associate = new Doctor,
  ) {    
    // `name` initialization/assignement
    // via base class super call.
    super(name);
    
    // aggregation of another Doctor type.
    this.associate = associate;
  }
  teamedUpWith () {
    return [
      this.constructor.name,
      ' ',
      this.name,
      '\'s associate is ',
      this.associate.constructor.name,
      ' ',
      this.associate.name
    ].join('')
  } 
}

const drJack = new Doctor('Jack');
const drJill = new PracticeDoctor('Jill');
const drMick = new PracticeDoctor('Mick', drJack);
const drJess = new PracticeDoctor('Jess', drJill);

console.log({ drJack, drJill, drMick, drJess });
console.log(
  'drJack?.teamedUpWith?.() ...',
  drJack?.teamedUpWith?.()
);
console.log(
  'drJill.teamedUpWith() ...',
  drJill.teamedUpWith()
);
console.log(
  'drMick.teamedUpWith() ...',
  drMick.teamedUpWith()
);
console.log(
  'drJess.teamedUpWith() ...',
  drJess.teamedUpWith()
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

【讨论】:

  • @husseinK ...从上面提供的方法/解决方案中还有什么问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多