2016-01-25 121 views
-1

對象VS對象

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

當你創建'Person'對象你'C'變量不會被初始化。 –

+2

當你嘗試將'Car'對象傳遞給'new Person()'時,沒有'Car'對象存在,所以'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 - 僅供參考,我找不到任何說'document.write()'實際上應該接受多個參數的標準文檔。該規範說它接受單個字符串參數。 – jfriend00

+0

謝謝'jfriend00'非常感謝您的幫助!我的代碼現在可以工作了!再次感謝! – VladimirJosephStephanOrlovsky