2016-01-25 5 views
-1

Объект против объекта

function Person(idn, dep, nam, age, gen, aut) { 
 
    this.idn = idn; //IDNumber 
 
    this.dep = dep; //Department 
 
    this.nam = nam; //Name 
 
    this.age = age; //Age 
 
    this.gen = gen; //Gender 
 
    this.aut = aut; 
 
    } //Auto 
 

 
function Car(make, modl, year, lice, colo, mile, ownr) { 
 
    this.make = make; //MakeOfTheCar 
 
    this.modl = modl; //ModelOfTheCar 
 
    this.year = year; //Year 
 
    this.lice = lice; //Licence 
 
    this.colo = colo; //ColorOfTheCar 
 
    this.mile = mile; //Mileage 
 
    this.ownr = ownr; 
 
    } //Owner 
 

 
var p01 = new Person(3475, 1, 'Rand,McKinnon', 33, 'M', c01); 
 
var p02 = new Person(7608, 2, 'Ken,Jones', 39, 'M', c02); 
 
var p03 = new Person(1957, 3, 'Vladi,Orlov', 58, 'M', c03); 
 

 
var c01 = new Car('Eagle', 'Talon,TSi', 1993, 'BP456H46', 'red', 201, p01); 
 
var c02 = new Car('Nissan', '300,ZX', 'J001', 1992, 'blue', 244, p02); 
 
var c03 = new Car('Toyota', 'Avalon,XLS', '6HPR64W', 2000, 'black', 118, p03); 
 

 
document.write('Car:c03.make=', c03.make, '|', c03.colo, '|', c03.ownr.nam, '<br>'); 
 
document.write('Person:p03.idn=', p03.idn, '|', p03.nam, '|', p03.gen, '|', p03.aut, '<br>');

Последний параметр (p03.aut): не определено

Нужна ваша помощь, чтобы выяснить, как заставить его работать.

+3

Ваши переменные 'c' не инициализируется при создании ваших' объектов Person'. –

+2

Ну, ни один из объектов 'Car' не существует, когда вы пытаетесь передать их в' new Person() ', так что' undefined' следует ожидать. –

+0

ouch, если кто-то владеет 2 автомобилями! – charlietfl

ответ

2

В то время вы выполняете эту строку кода:

var p03 = new Person(1957, 3, 'Vladi,Orlov', 58, 'M', c03); 

c03 пока не имеет значения. Итак, вы передаете значение undefined, и это то, что хранится в p03.aut. Когда вы позже получите это значение, оно получит значение undefined, которое вы ранее разместили там.

Поскольку у вас есть проблема с курицей и яйцом (оба объекта не могут оба вызвать их конструкторы, ссылаясь друг на друга, поскольку один из них должен быть создан первым), вы должны установить один из этих аргументов на объект после оба были построены (например, не в конструкторе).

Например, вы можете сделать это:

var p01 = new Person(3475, 1, 'Rand,McKinnon', 33, 'M'); 
var p02 = new Person(7608, 2, 'Ken,Jones', 39, 'M'); 
var p03 = new Person(1957, 3, 'Vladi,Orlov', 58, 'M'); 

var c01 = new Car('Eagle', 'Talon,TSi', 1993, 'BP456H46', 'red', 201, p01); 
var c02 = new Car('Nissan', '300,ZX', 'J001', 1992, 'blue', 244, p02); 
var c03 = new Car('Toyota', 'Avalon,XLS', '6HPR64W', 2000, 'black', 118, p03); 

p01.aut = c01; 
p02.aut = c02; 
p03.aut = c03; 

document.write('Car:c03.make=', c03.make, '|', c03.colo, '|', c03.ownr.nam, '<br>'); 
document.write('Person:p03.idn=', p03.idn, '|', p03.nam, '|', p03.gen, '|', p03.aut, '<br>'); 
+0

@NikolayErmakov - OP не показывает код, который ссылается на 'p01.aut', но все они имеют такую ​​же проблему с свойством' .aut'. – jfriend00

+0

@VladimirJosephStephanOrlovsky - FYI, я не могу найти документацию по стандартам, в которой говорится, что 'document.write()' фактически должен принимать несколько аргументов. Спектр говорит, что он принимает один строковый аргумент. – jfriend00

+0

Большое спасибо за эту помощь! Мой код теперь работает как запрошенный! Еще раз спасибо! – VladimirJosephStephanOrlovsky

Смежные вопросы