将对象"存储"在对象中是否好

nic*_*ast 4 javascript object

是否更好地存储对象或引用其他对象中的对象?让我举个例子来解释一下.

我有一个对象"团队"和一个对象"单元"该单元属于团队.我想在对象"团队"中"存储"对象"单元".

1)我可以这样做:单位存储在团队对象中

// class Team
function Team() {
    this.units = [];
}
// class Unit
function Unit(team) {
    team.units.push(this);
}
myTeam = new Team();
units = [];
units[units.length] = new Unit( myTeam );
Run Code Online (Sandbox Code Playgroud)

2)或类似的东西:单位id存储在团队对象中

// class Team
function Team() {
    this.units = [];
}
// class Unit
function Unit(team, id) {
    team.units.push(id);
}
myTeam = new Team();
units = [];
units[units.length] = new Unit( myTeam, units.length );
Run Code Online (Sandbox Code Playgroud)

这是可以理解的吗?

Tom*_*icz 5

绝对是第一个更面向对象的方法.我没有看到有id和外部阵列的任何优点.但缺点是显而易见的:

  • 外部units阵列可以在没有你注意的情况下修改,使得ids不同步而且几乎没用.试试调试吧!

  • 由于没有封装,每个都Team可以修改任何封装Unit

  • 似乎是一个数组存储引用的所有单位,而只有一个Team 拥有Unit.

  • 删除一个Team会怎么样?

    • 如果你不Unit直接删除所有s,你会得到内存泄漏

    • 您可能希望从公用units表中删除其所有单位.但这将在units表格中留下空白.

    • 如果你也删除单位并压缩units数组,你将不得不修改所有其他Teams,因为数组中的索引将会改变

  • id Unit没有商业价值