2015-06-24 4 views
0

Я делаю новое личное упражнение, и я начинаю JS OOP.Javascript OOP и массив

Моя цель: создать небольшую армию роботов, где каждый робот представится.

Мой код отличный, и он работает, но я хотел бы его улучшить. Я хотел бы добавить своих роботов в массив и создать цикл для введения каждого робота.

это не сложно, но я не могу создать массив в OOP Javascript. Я не понимаю, как я могу создать его со всеми функциями моих роботов.

Вот мой код:

// Objet Robot 
function Robot(nick, pv, maxSpeed, position) { 
this.nick = nick; 
this.pv = pv; 
this.maxSpeed = maxSpeed; 
this.position = position; 
}; 

//Méthode présentation des robots 
Robot.prototype.sePresenter = function() { 
console.log("Bonjour je m'appelle " + this.nick + ". J'ai " + this.pv + " points de vie." + " Je me déplace à " + this.maxSpeed + " cases par seconde. Je suis à la case de coordonnées " + this.position); 
}; 

// Variables 
var robot1 = new Robot('Maurice',95,2,(5,8)); 
var robot2 = new Robot('Lilian',76,3,(12,25)); 
var robot3 = new Robot('Ernest',100,1,(11,14)); 
var robot4 = new Robot('Juliette',87,3,(2,17)); 


// Appel Méthode sePresenter 
robot1.sePresenter(); 
robot2.sePresenter(); 
robot3.sePresenter(); 
robot4.sePresenter(); 
+1

Что означает, что вы «не можете создать массив в OOP Javascript»? Это специальное правило, за которым вы следите? –

+0

Btw в JS все это объект, поэтому в теории все JS - это база объектов. Массивы - это объект, который вы можете просто создать, как обычно, в JS, и это OOP. – GillesC

ответ

6

Я не совсем уверен, что вы спрашиваете, но если вы хотите массив Robot с и называть sePresenter на каждом из них, вы можете использовать array initializer ([...]) и Array#forEach (или есть several other ways в массивы петель):

var robots = [ 
    new Robot('Maurice',95,2,(5,8)), 
    new Robot('Lilian',76,3,(12,25)), 
    new Robot('Ernest',100,1,(11,14)), 
    new Robot('Juliette',87,3,(2,17)) 
]; 
robots.forEach(function(robot) { 
    robot.sePresenter(); 
}); 

Боковое примечание. Ваши призывы к вашим конструкторам немного странны. Это:

new Robot('Juliette',87,3,(2,17)); 

... точно так же, как это:

new Robot('Juliette',87,3,17); 
// Note no (2,...) -------^ 

... так как 2 и 17 являются литералы.

В JavaScript comma operator оценивает оба его операнда, а его результатом является значение второго операнда. Итак, (2,17) evalutes to 17. В скобках вызывается функция только тогда, когда вещь перед парсером является ссылкой на функцию.

Если 2,17 предназначается, чтобы быть координаты, вы, вероятно, хотел массив:

new Robot('Juliette',87,3,[2,17]); 
// [] rather than() -----^----^ 

... которые вы бы ссылаться в Robot в this.position[0] и this.position[1].

Или объект:

new Robot('Juliette',87,3,{x:2,y:17}); 
// Object initializer ----^^^^^^^^^^ 

... которые вы бы ссылаться в Robot в this.position.x и this.position.y.

+1

Как всегда. четкие ответы, исправления и дополнительную информационную информацию –

+0

woaaah большое спасибо, ваш ответ очень ясен !! –