2016-07-31 2 views
2

Контекст: Я строил модель рынка недвижимости на основе агентов. У меня есть предметы домашнего обихода, которые имеют свойства и методы, и до сих пор я создал их так:Новые экземпляры объектов, генератор, массив, генерация имен

var houseHoldArray = []; 

var Household = function(name, house) { 
    this.name = name; 
    this.house = house.address; 
    this.x = house.x; 
    this.y = house.y; 
    this.isHomeOwner = true; 
    this.isSelling = false; 

}; 

Household.prototype.draw = function() { 
ellipse(this.x, this.y, 10, 10); 
}; 

Household.prototype.determinMove = function() { 
    if(random(0, 100) <= 75){ 
     this.isSelling = true; 
    } 
}; 

var household1 = new Household("Smith", house1); 
var household2 = new Household("Black", house2); 
var household3 = new Household("Johnson", house3); 
var household4 = new Household("Williams", house4); 
var household5 = new Household("Jones", house5); 

houseHoldArray.push(household1, household2, household3, household4, household5); 

household1.draw(); 
household2.draw(); 
household3.draw(); 
household4.draw(); 
household5.draw(); 

теперь я хочу создать функцию, срабатывает при нажатии на кнопку, которая будет автоматически создавать определенное количество новых бытовые экземпляры и хранить их в массиве, так как мне нужно будет перебирать их позже с помощью цикла for и выполнять определенные действия в зависимости от состояния их свойств isSelling и isHomeowner.

Вопрос: как создать функцию, которая, по нажатию кнопки, будет генерировать определенное количество новых Houselhold экземпляров объектов и подтолкнуть их к houseHoldArray?

Вы можете найти более эффективный способ сделать это, но в конце концов, я хочу, чтобы иметь массив, содержащий индивидуальную информацию домочадца, которая позволит мне запустить что-то вроде этого:

for (var i = 0; i < houseHoldArray.length; i++) { 
    if houseHoldArray[i].isSelling { 
     //do something 
    } 
    houseHoldArray[i].determinMove() 
} 

ответ

0

Вместо того, чтобы использовать " houseHold1, houseHold2 ", давайте уже будем использовать их как массив. То же самое с Домами. Как это:

var houseHoldArray = []; 
var houses = [new House(), new House(), new House(), new House(), new House()]; 
function addHouseHolds(number, names, houseIndexes){ 
    for(var i = 0; i < number; i++){ 
     household = new Household(names[i],houses[ houseIndexes[i] ]); 
     houseHoldArray.push(household); 
    } 
} 

в HTML:

<button onclick='addHouseHolds(5, ["Smith", "Black", "Johnson","Williams","Jones"], [0,1,2,3,4])'>Click me</button> 
Смежные вопросы