Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать названия спутников в конструктор? (https://javascript.ru/forum/misc/70338-kak-peredat-nazvaniya-sputnikov-v-konstruktor.html)

Negotiant 28.08.2017 14:23

Как передать названия спутников в конструктор?
 
function Satellite(data, planet) {
  this.planet = planet;
  this.x = data.x;
  this.y = data.y;

  this.move = function move() {
    /* реализация движения спутника */

    // при этом здесь доступны данные планеты
    this.planet.x;
    this.planet.y;
  }
}


function Planet(data) {
  this.radius = data.radius;
  this.satellites = [];
  this.x = data.x;
  this.y = data.y;

  for (var i = 0; i < data.satellites.length; i++) {
    this.satellites.push(new Satellite(data.satellites[i], this));
  }

  this.move = function move() {
    /* реализация движения только планеты */

    // и запуск движения спутников
    for (var i = 0; i < this.satellites.length; i++) {
      this.satellites[i].move();
    }
  }
}

// данные о планетах
var data = [{
  name: 'Earth',
  radius: 80,
  x: 100,
  y: 100,
  satellites: [{ // как передать названия спутников в их конструктор?
    name: 'Moon',
    radius: 10,
    x: 20, // относительно земли
    y: 20
  }]
}, {
  name: 'Mars',
  radius: 40,
  x: 160,
  y: 180,
  satellites: [{
    name: 'Moon1',
    radius: 1,
    x: 14, // относительно земли
    y: 18
  }]
}];

// здесь экземпляры планет
var planets = [];

// создаём планеты и сохраняем их в переменную planets
for (var i = 0; i < data.length; i++) {
  planets.push(new Planet(data[i]));
}

Nexus 28.08.2017 16:33

Цитата:

Сообщение от Negotiant
Как передать названия спутников в конструктор?

Данные передаются в 23-й строке, сохранить их можно так:
function Satellite(data, planet) {
  this.planet = planet;
  *!*this.name=data.name;*/!*
  this.x = data.x;
  this.y = data.y;
 
  this.move = function move() {
    /* реализация движения спутника */
 
    // при этом здесь доступны данные планеты
    this.planet.x;
    this.planet.y;
  }
}

Negotiant 28.08.2017 16:51

Да, огромное спасибо.


Часовой пояс GMT +3, время: 13:37.