どうも、chuckです。引き続き、Underscore.jsを読んでいきます。
今回読むのはこの箇所。
いやあ、Underscore.jsの目玉と言ってもいいくらいですね!_(アンダースコア)を変数定義しています。
何をしているかと言うと、objを引数にとった関数がありますね。それを_に代入しています。
では、関数の中身を見ていきます。
拡大。
1行目と2行目はif文がありますね。instanceofを使って何かを判定しています。
instanceof演算子は、オブジェクトが自身のプロトタイプにコンストラクタのprototypeプロパティを持っているかを確認します。
うーむ、難しい…w
もう一度。
1行目は、obj がプロトタイプとして、_を持っているかどうか確認してるんですよね。で、trueになれば、問題なくそれを返す。
2行目は、1行目がfalseになった場合に到達する。thisがプロトタイプとして、_を持っていないとき、new _(obj)を返す。
これ、推測なんですけど、意図的にコンストラクタ呼び出しをしてますよね???たぶん。
thisとコンストラクタって、どこかで勉強した気がする。
コンストラクタ呼び出しにすることで、thisの値がグローバルオブジェクトではなく、自分自身?になるんですよね?たしか。
確認した。
はい、thisにはインスタンス自身が入ります。
というわけで、いずれにせよ、2つのif文でチェックをしてるわけですね。そして3行目で、プロパティを新規作成して引数のobjをセットしている模様。(なぜそんな処理をしているのかは謎)
まとめ
少ないですが、今回は_(アンダースコア)変数の定義について見てみました。
単なる変数定義のようで、そこにはしっかりとプロトタイプのチェックがあって、勉強になりました。
instanceofを適切に使えるようになったら、JavaScriptエンジニアとしてかなりかっこいい感じがします。