1

環境

new一部の関数はプレフィックスでのみ呼び出すことができることに気付きました。それなしで呼び出すと、エラーIllegal Invocationがスローされます。Image以下は、さまざまな方法で が呼び出されたときにコンソールがどのように反応したかを示す 2 つの例です。

-> new Image();
<- <img>
-> Image();
<- TypeError: DOM object constructor cannot be called as a function.

さらに興味深いことに、よく観察すると、これらのタイプの関数は関数のように見えますが、そうではありません。Imageたとえば、typeofコマンドはそれが関数であることを明らかにしますImageが、のコンストラクターはImageそれがオブジェクトであることを暗示します。

これは、以下のようなほとんどの構築関数とは大きく異なります。

function Foo(){
    this.identity = 'Bar';
}

この関数は、とFooの 2 つの方法で呼び出すことができます。これは関数とは大きく異なります。new Foo()Foo()Image

質問

関数でのこのアクションは、Imageほとんどの構築関数とは大きく異なります。これはどのように可能ですか?newこれが、プレフィックスを で使用する必要がある理由Imageですか? さらに重要なのは、このタイプの機能を再現できるかどうかです。

4

2 に答える 2