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
は名前付き関数へのポインタです。