2012-04-21 80 views
7

我正在學習關於JavaScript的原型,並提出了小提琴(http://jsfiddle.net/3MuZa/1/)與此javascript:爲什麼控制檯注意到我之前改變了我的原型?

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);}; 

有趣的是,console.debug(dog.__proto__);表明makeSound是動物類的原型的方法。

但是,我將該方法添加到後面的原型中。爲什麼控制檯注意到如果控制流還沒有在我的代碼中得到,那麼原型有makeSound方法?

+2

在最後一行設置一個斷點。執行到那個斷點。檢查控制檯。你會看到'makeSound'不存在。 – 2012-04-21 23:26:21

+0

謝謝!確實,設置一個斷點並檢查局部變量表明'makeSound'方法不存在。 – 2012-04-21 23:41:51

回答

6

控制檯是「活的」。即使你先記錄它,它也會反映後面的變化。

就我所知,它在對象,函數,數組上的行爲如此。但是如果你記錄字符串,布爾值和數字,他們就會在登錄時打印他們的意思。

+0

如果將'console.debug'更改爲'console.log',則它按預期工作。 – 2012-04-21 23:25:56

+0

@JamesMcLaughlin你「意料之中」是什麼意思?我看到調試和日誌沒有區別。 – 2012-04-21 23:29:38

+0

謝謝,同樣在這裏。我不認爲我看到了不同。 – 2012-04-21 23:34:37

相關問題