2012-04-21 12 views
7

uczę się o prototypów JavaScript i popełnił Fiddle (http://jsfiddle.net/3MuZa/1/) z tym javascript:Dlaczego konsola zauważa, że ​​zmieniłem prototyp, zanim to zrobię?

function Animal(name, sound) { 
    this.name = name; 
    this.sound = sound; 
} 

var dog = new Animal("Dog", "Bark"); 
console.debug(dog.__proto__); 

Animal.prototype.makeSound = function() {console.log(this.sound);}; 

ciekawe, console.debug(dog.__proto__); ujawnia, że ​​makeSound to metoda prototypu klasy Zwierząt.

Dodaje jednak tę metodę do prototypu w późniejszej linii. Dlaczego konsola zauważa, że ​​prototyp ma metodę makeSound, jeśli w moim kodzie nie uzyskano jeszcze przepływu kontrolnego?

+2

Umożliwia ustawienie punktu przerwania w tym ostatnim wierszu. Wykonaj do tego punktu przełomowego. Sprawdź konsolę. Zobaczysz, że 'makeSound' nie jest obecny. –

+0

Dziękujemy! Rzeczywiście, ustawienie punktu przerwania i zbadanie zmiennych lokalnych ujawnia, że ​​metoda 'makeSound' nie istnieje. –

Odpowiedz

6

Konsola jest "na żywo". nawet jeśli zrobisz to najpierw, to odzwierciedli później zmiany.

O ile mi wiadomo, zachowuje się w ten sposób na obiektach, funkcjach, tablicach. Ale jeśli logujesz łańcuchy, wartości logiczne i liczby, drukują to, co mają na myśli w momencie, gdy były rejestrowane.

+0

Po zmianie 'console.debug' na' console.log' działa zgodnie z oczekiwaniami. –

+0

@JamesMcLaughlin Co masz na myśli mówiąc "zgodnie z oczekiwaniami"? Nie widzę różnicy między debugowaniem a logowaniem. –

+0

Dzięki, to samo tutaj. Myślę, że nie widzę różnicy. –

Powiązane problemy