【问题标题】:JavaScript child object access own valuesJavaScript 子对象访问自己的值
【发布时间】:2015-06-03 17:15:23
【问题描述】:

所以我有一个大的父对象,它有多个需要使用父值和它们自己的值来计算它们的值的子对象。这是一个向您展示这个想法的简单示例:

function Parent(stuff, otherStuff){
    this.pValue = 4;
    this.child1 ={
        childStuff: this.pValue*stuff.stuffValue,
        childStuff2: childstuff*otherStuff.otherValue
    }
}

这东西在另一部分代码中用适当的变量调用:

var thething = new Parent(stuff, otherStuff);

我需要访问 thething 的子变量,并且当 stuff 或 otherStuff 中的变量发生变化时,所有内容都需要重新计算。

那么在计算 childStuff2 时如何访问“childstuff”值?不幸的是,我必须从不同的地方处理所有这些值,其中一些是相互依赖的,所以整个事情有点混乱,因此试图以这种方式做事。

仍在学习,因此欢迎和赞赏任何和所有输入。不是以英语为母语的人,因此对任何错误感到抱歉。谢谢。

【问题讨论】:

  • 您发布的代码会产生语法错误。你到底想做什么?
  • childstufflabel,它基本上是一种执行 GOTO 的方式。它既不是变量也不是属性,而且语句中间不能有标签,所以childStuff2: 会抛出错误。
  • 如果你想要一个简单的对象,那么摆脱你的函数并重写你的代码来使用对象。如果您想使用函数和原型来实现类类系统,请重新开始并将业务逻辑与数据结构分开(即设计您的类,然后使用其中的数据创建它们的实例)。
  • childStuff 在括号中以突出显示它。不是最好的主意,编辑代码。在另一个地方调用父级 var thing = new parent(stuff, otherStuff) 在父级中还有大约 15 个子对象,我需要在应用程序的另一部分中访问它们,父级是在其中启动的。此外,我的规格是一团糟,所以可能是我现在一切都在树林里。
  • @muhonne — 撇号不是括号,代码在到达它们之前抛出了一个错误(它仍然会抛出那个错误)。

标签: javascript oop object parent-child


【解决方案1】:

也许你正在寻找这样的东西:

function Child(pValue){
  this.childStuff = pValue * stuff.stuffValue;
  this.childStuff2 = this.childstuff * otherStuff.otherValue;
}

function Parent(stuff, otherStuff){
  this.pValue = 4;
  this.children = [];
}

Parent.prototype.addChild = function(){
  var newChild = new Child(this.pValue);
  this.children.push(newChild);
}

要创建一个具有三个孩子的父母:

var aParent = new Parent('foo', 'bar');

aParent.addChild();
aParent.addChild();
aParent.addChild();

请记住,如果 aParent.pValue 发生更改,则不会重新计算子项的属性。但也许这就是你想要的。

【讨论】:

  • 大约有 30 个 pValue,每个孩子计算它们的值都不同,所以这会使代码过于复杂。但我认为如果情况不同,它会起作用。
【解决方案2】:

我需要的是一个“快速修复”,让孩子能够访问自己的价值观。由于这似乎不可能,我只是将值设置在孩子之外:

function Parent(stuff, otherStuff){
    this.pValue = 4;
    this.child1 ={
        childStuff: this.pValue*stuff.stuffValue,
        //childStuff2: childstuff*otherStuff.otherValue
    };
    this.child1.childstuff2 = this.child1.childstuff*otherstuff.otherValue;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2020-09-13
    • 2011-03-20
    • 2013-10-28
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多