関数定義と関数リテラルしたときのコンストラクタ名
■関数定義したコンストラクタ
function A(){} var a=new A; console.log(a.__proto__, a instanceof A); // A{}, true
var B=function(){}; var b=new B; console.log(b.__proto__, b instanceof B); // Object{}, true
Bは一見、Bという名のコンストラクタのように見えるが、実際には無名関数の参照に過ぎないということになる。
bのコンストラクタは無名だが、bはBのインスタンスである。という結果はかなり気持ち悪い。
個人的には、後者の関数リテラルで書くほうがjavascript的だなと思うところはあったけど、こうして見るとちょっと問題となりそうにも見える。
コンストラクタ名を比較できないとか?
ここまで書いておいて、同様のことを扱ってる記事がないかと探したら、ありました。
http://qiita.com/items/5df25f771d4602fd6293
それから、以前にprototypeをリテラルで初期化したときのインスタンス
の振る舞いについて書いていた。別の話か
http://ynsyns.hateblo.jp/entry/2012/03/29/203801