Javascript对象奇怪的行为

Javascript object strange behavior

本文关键字:对象 Javascript      更新时间:2023-09-26

我执行了这个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(直接写入字符串的 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-Broom broom...在之后打印,因为 document.write() 函数是在 motorbike 对象声明之后调用的。

如果要将功能分配给对象,则必须仅分配名称,而不带括号:

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

如果说 Wheel: move() ,则立即执行 move,并将结果分配给属性 Wheel。因此,movestart 都在初始化期间执行,并开始写入。结果(如函数返回的字符串(在写入 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...";
}