2015-03-30 4 views
-2

Итак, у меня есть этот один большой родительский объект, который имеет несколько дочерних элементов, которые должны вычислять свои значения, используя значения родителей и их собственные значения. Вот краткий пример, чтобы показать вам идею:Доступ к собственным дочерним объектам JavaScript

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

Эта вещь называется в другой части кода с соответствующими переменными:

var thething = new Parent(stuff, otherStuff); 

мне нужен доступ к childvariables в thething и все должно пересчитываться при изменении переменных в материалах или других элементах.

Как я могу получить доступ к значению «childtuff» при расчете childStuff2? К сожалению, я должен манипулировать всеми этими значениями из разных мест, и некоторые из них зависят от eachother, поэтому все это немного беспорядочно, следовательно, пытаясь так поступать.

Все еще узнайте, что любые и все входные данные приветствуются и оцениваются. Не родной английский оратор, так жаль каких-либо ошибок. Благодарю.

+1

Код, который вы отправили, будет генерировать синтаксические ошибки. Что именно вы хотите сделать? – Pointy

+0

'childstuff' - это [метка] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label), это в основном способ выполнения GOTO. Это не переменная или свойство, и вы не можете иметь метку в середине инструкции, поэтому 'childStuff2: 'выдает ошибку. – Quentin

+2

Если вы хотите простой объект, то избавитесь от своих функций и перепишите код для использования объектов. Если вы хотите внедрить подобную классу систему с использованием функций и прототипов, начните и снова и отделите свою бизнес-логику от своих структур данных (т. Е. Создайте свои классы, а затем создайте их экземпляры с вашими данными). – Quentin

ответ

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 изменения, свойства для детей не будет пересчитываться. Но, возможно, это то, чего вы хотите.

+0

Существует около 30 pValues, и каждый ребенок вычисляет их значения по-разному, поэтому это сделает код слишком сложным. Но я думаю, что это сработает, если обстоятельства будут разными. – muhonne

-1

Мне нужно было «быстрое исправление» для ребенка, чтобы получить доступ к его собственным значениям. Поскольку это кажется невозможным, я просто устанавливаю значение вне ребенка:

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; 
} 
Смежные вопросы