2015-07-19 3 views
3

Я выполнил этот яваскрипт кода: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 делает это?

ответ

3

Глядя на:

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

Эти методы запуска, а не при вызове свойства, но когда объект построен!

Именно поэтому вызывается document.write из start и, следовательно, вы видите строку с: 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 
0

Когда вы пишете:

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

функция start выполняется, и -Starting распечатаны.

-I'm moving и -Broom broom... печатаются после того, так как функция document.write() вызывается после объявления о motorbike объекта.

0

Если вы хотите назначить функции для объекта, вы должны назначить только имя, без скобок:

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

Если вы говорите Wheel: move(), движение выполняется сразу и результат, присвоенное свойство Wheel. Поэтому move и start выполняются во время инициализации и начинают запись с начала. В результаты (как в строки, возвращаемой функцией) записываются в дальнейшем при написании document.write(motorbike.Wheel); и document.write(motorbike.Motor);

PS Если функции назначены, при использовании их в дальнейшем, вам нужно скобки, чтобы вызвать функцию: document.write(motorbike.Wheel());

0

Javascript выполняет код, сверху вниз.

Таким образом, функция move() получает исполнение и возвращает -I'm moving<br/>, который устанавливается в качестве значения колеса. Затем выполняется 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..."; 
} 
Смежные вопросы