繁体   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