2015-07-19 63 views
3

我執行這段JavaScript代碼:JavaScript對象奇怪的行爲

var motorbike = { 
    "Wheel" : move(), 
    "Motor" : start() 
}; // CREATE MOTORBIKE OBJECT 

document.write(motorbike.Wheel); // MOVE MY MOTORBIKE 
document.write(motorbike.Motor); // START MY MOTORBIKE 

function move(){ 
    return "-I'm moving<br/>"; 
} 

function start(){ 
    document.write("-Starting<br/>"); 
    return "-Broom broom..."; 
} 

在屏幕應該出現:

-I'm moving 
-Starting 
-Broom broom... 

但是,當我執行它...

-Starting 
-I'm moving 
-Broom broom... 

JavaScript顯示首先是「直接」document.write(它有一個直接寫入的字符串),然後打印出與返回一起工作的那些。爲什麼JavaScript會這樣做?

回答

3

綜觀:

var motorbike = { 
    "Wheel" : move(), 
    "Motor" : start() 
}; 

這些方法運行,而不是當你調用屬性,但是當對象是建立!

這就是爲什麼startdocument.write被調用,因此你看到的字符串:document.write("-Starting<br/>");第一。

嘗試運行此:

var motorbike = { 
    "Wheel" : alert('1') 
}; 

,您會立即立即看到警報!

可能後:

var motorbike = { 
    "Wheel" : move, 
    "Motor" : start 
}; // CREATE MOTORBIKE OBJECT 

document.write(motorbike.Wheel()); // MOVE MY MOTORBIKE 
document.write(motorbike.Motor()); // START MY MOTORBIKE 
0

當寫:

var motorbike = { 
    "Wheel" : move(), 
    "Motor" : start() 
}; 

start功能被執行,和-Starting打印。

-I'm moving-Broom broom...之後被打印,因爲在motorbike對象聲明後調用document.write()函數。

0

如果你要的功能分配給對象,你必須只分配了名,不包括括號:

var motorbike = { 
    "Wheel" : move, 
    "Motor" : start 
}; 

如果你說Wheel: move(),此舉立即執行,結果被分配到財產輪。因此movestart都是在初始化期間執行的,並且開始寫入開始。寫document.write(motorbike.Wheel);document.write(motorbike.Motor);

PS時,如果功能分配,之後使用它們時,你需要括號,調用函數的結果(如在由該函數返回的字符串),其後寫:document.write(motorbike.Wheel());

0

的Javascript從頂部執行你的代碼了。

因此函數move()得到執行並返回-I'm moving<br/>它被設置爲Wheel的值。然後start()被執行,並立即將-Starting<br/>寫入document。在這以後,線

document.write(motorbike.Wheel); // MOVE MY MOTORBIKE 
document.write(motorbike.Motor); // START MY MOTORBIKE 

被執行和的WheelMoter值追加到該文檔。

如果您的start()將返回整個文本,它會按預期工作。

function start(){ 
    return "-Starting<br/>-Broom broom..."; 
}