簡體   English   中英

Javascript對象奇怪的行為

[英]Javascript object strange behavior

我執行了這個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首先打印“direct”document.write(直接寫入字符串),然后打印出返回的那些。 為什么javascript會這樣做?

看着 :

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

當你寫:

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

執行start功能,並-Starting打印。

-I'm moving因為在motorbike對象聲明之后調用了document.write()函數,所以-Broom broom...打印后會-I'm moving -Broom broom...

如果要將功能分配給對象,則必須僅指定名稱,而不使用括號:

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

如果你說Wheel: move() ,則立即執行move並將結果分配給屬性Wheel。 因此,在初始化期間執行movestart ,並開始寫入開始。 寫完document.write(motorbike.Wheel);后,會寫入結果 (如函數返回的字符串document.write(motorbike.Wheel); document.write(motorbike.Motor);

PS如果分配了這些函數,那么在以后使用它們時,你需要使用括號來調用函數: document.write(motorbike.Wheel());

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...";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM