Javascript Undefined Array значения не подключаются к функции? Как запустить функцию рандомизированных черт, чтобы каждый массив содержал уникальные черты? - PullRequest
0 голосов
/ 10 ноября 2018

Во-первых, мои извинения, если название вообще расплывчато, я довольно новичок в javascript.

Когда этот код выполняется, он должен создать 2 окна предупреждений. Один для каждой из характеристик Боба К. Конечно, все характеристики Боба 2 сейчас не определены, потому что я не могу понять, как заставить мою функцию SpawnInnerCharacteristics применять ко всем моим людям.

Мне нужно выяснить, как присваивать bob2 (и будущему bob3, и bob 4, и т. Д.) Свои собственные внутренние характеристики из функции внутренних характеристик. Для этого мне нужна помощь с А) Смена «Боба». внутри функции spawnInnerCharacteristics что-то, что может вместить больше, чем просто этот особый боб. и B) повторно запустить функцию SpawnInnerCharacteristics для каждого нового созданного Боба, чтобы у всех них были свои уникальные характеристики. И что бы я ни пропустил, чтобы эти две вещи происходили правильно.

Кроме того, необязательный третий вопрос, пока мы на нем, как бы мне было сгенерировать случайное количество бобов (каждый из которых содержал свои собственные внутренние характеристики с использованием моей функции SpawnInnerCharacteristics, а не копий)?

    function rand(maxvalue) {
      return Math.floor(Math.random() * Math.floor(maxvalue));
    }


    function person(id, c, nrg, e, K_, E_, D_, A_, C_, G_, B_, M_, SM_, V_, S_, T_, X_, H_, Z_,int_){
    this.id = id;
    this.color = c;
    this.nrg = nrg;
    this.ec = e;
    this.K = K_;
    this.E = E_;
    this.D = D_;
    this.A = A_;
    this.C = C_;
    this.G = G_;
    this.B = B_;
    this.M = M_;
    this.SM = SM_;
    this.V = V_;
    this.S = S_;
    this.T = T_;
    this.X = X_;
    this.H = H_;
    this.Z = Z_;
    this.int = int_;
    }

    var Mom = new person(1,"c","nrg","brwn", "K kbr", "E e", "d d", "Ay Ay", "c c", "g g", "B B", "m m", "Ay Ay", "v v", "S S", "Td Td", "X X", "h h", "Z Z", 2);
    var Dad = new person(2,"c","nrg","black", "k kbr", "E E", "d d", "Ay Ay", "c c", "g g", "B B", "m m", "Ay Ay", "v v", "S S", "Td Td", "X X", "h h", "Z Z", 5);
    var Bob = new person(spawnInnerCharacteristics);
    var Bob2 = new person(spawnInnerCharacteristics);

    function spawnInnerCharacteristics(){

            Bob.K = physicalCharacteristics(Mom.K, Dad.K)
            Bob.E = physicalCharacteristics(Mom.E, Dad.E)
            Bob.D = physicalCharacteristics(Mom.D, Dad.D)
            Bob.A = physicalCharacteristics(Mom.A, Dad.A)
            Bob.C = physicalCharacteristics(Mom.C, Dad.C)
            Bob.G = physicalCharacteristics(Mom.G, Dad.G)
            Bob.B = physicalCharacteristics(Mom.B, Dad.B)
            Bob.M = physicalCharacteristics(Mom.M, Dad.M)
            Bob.SM = physicalCharacteristics(Mom.SM, Dad.SM)
            Bob.V = physicalCharacteristics(Mom.V, Dad.V)
            Bob.S = physicalCharacteristics(Mom.S, Dad.S)
            Bob.T = physicalCharacteristics(Mom.T, Dad.T)
            Bob.X = physicalCharacteristics(Mom.X, Dad.X)
            Bob.H = physicalCharacteristics(Mom.H, Dad.H)
            Bob.Z = physicalCharacteristics(Mom.Z, Dad.Z)

            Bob.int = mentalCharacteristics(Mom.int, Dad.int)

            return spawnInnerCharacteristics;

                function physicalCharacteristics(a, b){
                var PA = [a.split(" ") , b.split(" ")];
                var AM = PA[0];
                var AD = PA[1]; 
                var CA = AD[Math.floor(Math.random()*AD.length)];
                var LA = AM[Math.floor(Math.random()*AM.length)];
                return LA + " " + CA;
                }
                function mentalCharacteristics(a, b){
                    return ((a*1 + b*1) /2 + rand(3));
                }

        }


    spawnInnerCharacteristics();
    window.alert("This is bob 1's K characteristic. Every once in a while, if the code is working how I'd like it to, the K's will vary between the two bobs: " + Bob.K);
    window.alert("This is bob 2's K characteristic.: " + Bob2.K);

1 Ответ

0 голосов
/ 10 ноября 2018

В вашем коде произошло несколько ошибок:

1) передача функции как id не имеет здесь большого смысла:

 var Bob = new person(spawnInnerCharacteristics);

2) spawnInnerCharacteristics всегда устанавливает свойства Bob на основе Mom и Dad.

3) Хотя несоблюдение соглашений о присвоении имен не является «ошибкой», оно облегчает чтение кода другими, если вы используете заглавные буквы в конструкторах (Person) и называете все остальное в camelCase (bob, dad) ).

Чтобы сделать это динамическим, вы могли бы передать двух родителей и потомка в качестве аргументов функции:

 function spawnInnerCharacteristics(child, mom, dad) {
   child.k = physicalCharacteristics(mom.k, dad.k);
   //...
 }

Таким образом, вы можете легко создать несколько человек и передать их:

 const mom = new Person(/*...*/);
 const dad = new Person(/*...*/);

 const alice = new Person(/*...*/);
 const bob = new Person(/*...*/);

 spawnInnerCharacteristics(alice, mom, dad);
 spawnInnerCharacterisitcs(bob, mom, dad);
...