var foo = function(){alert('foo')}
function bar(){alert('bar')}
foo.prototypeはオブジェクトを指しているのに、名前付き関数bar.prototypeはそれ自体を指しているのはなぜですか?
この動作はブラウザ コンソールから観察されることを付け加えておきます。
var foo = function(){alert('foo')}
function bar(){alert('bar')}
foo.prototypeはオブジェクトを指しているのに、名前付き関数bar.prototypeはそれ自体を指しているのはなぜですか?
この動作はブラウザ コンソールから観察されることを付け加えておきます。
Chrome などのコンソールを使用してオブジェクトの値をログに記録している場合は、使用prototypeしないことをお勧めします。Chrome コンソールは、他のブラウザー コンソールと同様に、プロトタイプ オブジェクトの出力をフォーマットします。
したがって、名前付き関数の場合は関数のログが記録されますnameが、名前のない関数の場合は単にログが記録されますObject。これは、関数の が関数または関数自体prototypeを指しているという意味ではありません。Objectそれがコンソールに表示されているだけです(誰かがそれについて訴える必要があります)。自分の目で確かめてください: http://jsfiddle.net/2xkpC/
それから関数の名前をどのように知るのprototypeですか? 関数のプロトタイプにはconstructor、関数自体を指すというプロパティがあり、関数の名前は、関数で呼び出されるプロパティに文字列として格納されnameます。したがって、prototypeオブジェクトをログに記録すると、次のように表示されますprototype.constructor.name || "Object"。
var foo = function(){alert('foo')}
console.log(foo.prototype); // logs "Object"
function bar(){alert('bar')}
console.log(bar.prototype); // logs bar.prototype.constructor.name
ここでデモを参照してください: http://jsfiddle.net/4bWfn/
コンソールを開いてログ出力の近くにある三角形をクリックすると、プロトタイプ オブジェクトのconstructorとプロパティが表示されます。__proto__その下constructorにもnameプロパティが表示されます。
JavaScript とオブジェクトの継承について詳しく知るには、prototypeこの回答をお読みください: https://stackoverflow.com/a/8096017/783743
var fooあなたの例では、匿名関数へのポインタであるためです。
と比較する
var foo = function me(){alert('foo');}
test=foo;
console.log(test.prototype);
herevar fooは名前付き関数へのポインタです。