2014-11-04 4 views
1

Это код Pet:JS объект, необходимо объяснение того, что происходит и почему

function Pet() { 
    this.vitals = new Vitals(); 
} 

function Vitals() { 
    this.hunger = 5; 
    this.thirst = 0; 
    this.emotions = { 
     happy: true, 
     sad: true 
    } 
} 

Ниже вызывающий и так далее:

$(document).ready(function() { 
    var pet = new Pet(); 
    console.log(pet); 
    pet.vitals.emotions.happy = false; 
    console.log(pet); 
}); 

Это то, что я получаю от консоли :

console results

Qu estion: Почему happyfalse в обоих считываниях, а не только на втором?

+2

См. [Является ли консоль JavaScript Chrome ленивой относительно оценки массивов?] (Http://stackoverflow.com/q/4057440/218196) –

ответ

1

Возможно, потому, что console.log может обновлять данные, уже напечатанные, если последующая ссылка на базовый объект обновляется. Попробуйте создать еще одну ссылку под названием pet2, чтобы увидеть трюк.

Кстати, вы должны проверить this и this.

+1

Интересно. Кто-то предположил, что он строит в этой ссылке и, кажется, фиксирует состояние исполнения, а не текущее состояние, так что ссылка была весьма полезна. :) – Matt

+0

Действительно, тема интересная :) – Mik378

 Смежные вопросы

  • Нет связанных вопросов^_^