我执行了这个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首先打印&#34;直接&#34; document.write(直接写入字符串的那个)然后打印使用return的那些。为什么javascript会这样做?
答案 0 :(得分:3)
看着:
var motorbike = {
"Wheel" : move(),
"Motor" : start()
};
这些方法运行,而不是在调用属性时,而是在构建对象时运行!
这就是调用document.write
的{{1}}的原因,因此您首先会看到来自start
的字符串。
尝试运行:
document.write("-Starting<br/>");
您将立即立即看到警报!
你可能可能之后:
var motorbike = {
"Wheel" : alert('1')
};
答案 1 :(得分:0)
当你写:
var motorbike = {
"Wheel" : move(),
"Motor" : start()
};
执行start
功能,并打印-Starting
。
-I'm moving
和-Broom broom...
,因为document.write()
对象声明后会调用motorbike
函数。
答案 2 :(得分:0)
如果要为对象分配功能,则必须仅指定名称,不带括号:
public class MyProvider implements ExceptionMapper<WebApplicationException> extends ResourceConfig {
public MyProvider() {
final Resource.Builder resourceBuilder = Resource.builder();
resourceBuilder.path("helloworld");
final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET");
methodBuilder.produces(MediaType.TEXT_PLAIN_TYPE)
.handledBy(new Inflector<ContainerRequestContext, String>() {
@Override
public String apply(ContainerRequestContext containerRequestContext) {
return "Hello World!";
}
});
final Resource resource = resourceBuilder.build();
registerResources(resource);
}
@Override
public Response toResponse(WebApplicationException ex) {
String trace = Exceptions.getStackTraceAsString(ex);
return Response.status(500).entity(trace).type("text/plain").build();
}
}
如果您说var motorbike = {
"Wheel" : move,
"Motor" : start
};
,则立即执行移动,并将结果分配给属性Wheel。因此Wheel: move()
和move
都在初始化期间执行,并开始写入开始。在编写start
和document.write(motorbike.Wheel);
PS如果分配了这些功能,那么在以后使用它们时,您需要使用括号来调用该函数:document.write(motorbike.Motor);
答案 3 :(得分:0)
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...";
}