2012-04-21 5 views
7

私はJavascriptのプロトタイプについて学習し、このJavaScriptでフィドル(http://jsfiddle.net/3MuZa/1/)を作っています:なぜ私は前に私のプロトタイプを変更したことに気付いていますか?

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は、Animalクラスのプロトタイプの方法であることが明らかになりました。

しかし、そのメソッドを後の行のプロトタイプに追加します。コントロールフローが自分のコードでまだ得られなかった場合、プロトタイプにmakeSoundメソッドがあることをコンソールに通知する理由は何ですか?

+2

最後の行にブレークポイントを設定します。そのブレークポイントまで実行します。コンソールを調べます。 'makeSound'が存在しないことがわかります。 –

+0

ありがとうございます!実際に、ブレークポイントを設定してローカル変数を調べると、 'makeSound'メソッドが存在しないことがわかります。 –

答えて

6

コンソールは「ライブ」です。最初にログを記録しても、後の変更が反映されます。

私が知る限り、それはオブジェクト、関数、配列でこのように動作します。しかし、文字列、ブール値、および数値をログに記録すると、ログに記録されたときの意味を表示します。

+0

'console.debug'を' console.log'に変更すると、期待通りに動作します。 –

+0

@JamesMcLaughlin「期待通りに」とはどういう意味ですか?私はデバッグとログの間に違いは見当たりません。 –

+0

ありがとう、ここと同じです。私は違いがないと思う。 –

関連する問題