[英]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()
};
这些方法运行,而不是在调用属性时,而是在构建对象时!
这就是为什么调用start
的document.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。 因此,在初始化期间执行move
和start
,并开始写入开始。 写完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
执行并将Wheel
和Moter
的值附加到文档中。
如果你的start()
将返回整个文本,它将按预期工作。
function start(){
return "-Starting<br/>-Broom broom...";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.