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(直接写入字符串的 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
和-Broom broom...
在之后打印,因为 document.write()
函数是在 motorbike
对象声明之后调用的。
如果要将功能分配给对象,则必须仅分配名称,而不带括号:
var motorbike = {
"Wheel" : move,
"Motor" : start
};
如果说 Wheel: move()
,则立即执行 move,并将结果分配给属性 Wheel。因此,move
和 start
都在初始化期间执行,并开始写入。结果(如函数返回的字符串(在写入 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...";
}
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值