JavaScriptでnew演算子をつけずにコンストラクタを実行する


またオブジェクト指向JavaScriptの原則で知った方法。実際に使うことはないと思うのだけど、こういう方法もあるのかと思ったので。

こんな感じでnew演算子をつけないとオブジェクトが作成されませんし、グローバルオブジェクト(ブラウザの場合はwindow)を汚染してしまいます。

でも、ArrayやRegExpのオブジェクトはnewをつけなくてもオブジェクトが作成されるみたいです。

このようにnew演算子を使わずにオブジェクトを生成する方法としては、下記のようにinstanceof演算子を使えばできるとのこと。

つまり、thisがPersonか調べて、falseならばnew演算子をつけた自分自身を返すというような感じです。再帰みたいな感じですね。これは思いつきませんでした。

ちなみに、こういうコンストラクタを『スコープセーフなコンストラクタ』というようです。ただ、『スコープセーフ』で検索してもJavaScript関連のページがほとんどヒットしない(ヒットしても『オブジェクト指向JavaScriptの原則』の紹介ページ)ので、日本ではあまり一般的な呼び方ではなさそうです。

アメリカとかだと使われてる言葉なのだろうか? 英語で検索してみると下記のページがヒットしたけど。
New/Scope Safe Constructors in OO JavaScript :: Mike Pack Development

まあでも、こんなエントリー書いといてなんだけど、多分自分は使わないと思う。一見、オブジェクトを生成しているようには見えないわけだし。

JavaScriptでnew演算子をつけずにコンストラクタを実行する” への2件のコメント

  1. 実際のビルドインコンストラクタはもっと確実な方法でコンストラクタ呼び出しかどうかを判断しています。
    それがユーザーランドでできるのはES6からです。

    • コメントありがとうございます。
      なるほど~。そういうことなんですね。
      と言いたいところですが、残念ながら、今の自分には理解できそうにないです・・・。
      有用な情報なのにすみません。勉強します。

コメントを残す

メールアドレスが公開されることはありません。