Как вернуть свойство объекта из функции внутри конструктора? - PullRequest
0 голосов
/ 02 мая 2019

Я строю небольшой конструктор мира на JavaScript (часть большого симулятора).

Я пытаюсь определить свойство объекта в функции конструктора, присвоив ему выходную функцию.

В приведенном ниже коде 'this.identifier' выполняется как талисман, но я хочу назначить более сложные функции, например, 'this.gender'.

В 'this.gender' Я хочу использовать math.random.math.floor для циклического перемещения по массиву (который имеет два значения, мужской и женский).

Когда я пишу реальную функцию, 'this.gender' удаляется из нового Человеческого объекта.

 {
   "identifier":42,
   "lifestate":"Alive",
   "health":"100",
   "age":"10",
   "metabolism":"12",
   "econsumption":"11111",
   "parent":"yes"
}
  • Пол сбрасывается, как только я изменяю его на функцию.

Я пытался использовать оператор return, но это не имеет значения.

class Bluehuman {
  constructor() {
    this.identifier = Math.floor((Math.random() * 100));
    this.lifestate = 'Alive';
    this.health = '100';
    this.age = '10';
    this.metabolism = ['Low','Medium','High'];
    this.econsumption = '11111';
    this.parent = ['Yes','No'];
    this.gender = ['Male','Female']; // Want to change this to a function without dropping from the new Bleuhuman object
    }
  }

var bluehuman = {};
var bluehumans = [];

for (var i = 0; i < 10; i++) {
  bluehuman[i] = new Bluehuman();
  bluehumans.push(bluehuman[i]);
}

var arrayPrint = JSON.stringify(bluehumans);
console.log(arrayPrint)

Как можно назначить вывод функции для this.gender, не удаляя его из нового объекта bluehuman?

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Вам не нужна функция, выражение прекрасно подходит для решения вашей проблемы

class Bluehuman {
  constructor() {
    this.identifier = Math.floor((Math.random() * 100));
    this.lifestate = 'Alive';
    this.health = '100';
    this.age = '10';
    this.metabolism = ['Low','Medium','High'];
    this.econsumption = '11111';
    this.parent = ['Yes','No'];
    this.gender = ['Male','Female'][Math.round(Math.random())];
    }
  }

var bluehuman = {};
var bluehumans = [];

for (var i = 0; i < 10; i++) {
  bluehuman[i] = new Bluehuman();
  bluehumans.push(bluehuman[i]);
}

var arrayPrint = JSON.stringify(bluehumans);
console.log(arrayPrint)
1 голос
/ 02 мая 2019

Вы можете просто назначить функцию как любое другое значение

  this.test = function() { };

, затем вы сможете вызвать ее как:

  new Bluehuman().test();

, и если вы войдете в консоль напрямуювы также увидите это:

  console.log(new Bluehuman());

Если вы, однако, вызовете JSON.stringify, он превратится в строку, содержащую только данные, функции (и многое другое) будут удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...