Foo
オブジェクトを作成するという名前のjsに「クラス」(関数)があります。非常に頻繁にnew
使用されるため、新しいインスタンスを作成するときにkeywoardを使用する必要がないようにします。Foo(something);
の代わりにnew Foo(something);
。
私はこれをFirefoxで動作させることができました:
function Foo(arg) {
if (this instanceof Window)
return new Foo(arg);
//Object construction here.
this.bar = "Hello " + arg;
}
これで、Fooを関数として呼び出すだけで、Fooのインスタンスを作成できます。
console.log(Foo("World").bar); //Output "Hello World" in console.
これはFFで機能していますが、Chromeでは機能せず、IEのテストはまだ行っていません。
クロームの問題は、それwindow
が本当にDOMWindow
クロームのタイプであるということです
Uncaught ReferenceError: Window is not defined
そしてthis instanceof DOMWindow
、何らかの理由でそれが与えるので、クロムでは動作しません:
ReferenceError: DOMWindow is not defined
私も使ってみましたが!(this instanceof Foo)
、typeof this
いつもあげているよう"object"
です。
すべてのブラウザでnew
呼び出すときにキーワードが省略されているかどうかを確実に検出するにはどうすればよいですか?Foo
更新:動作しますが、実際の機能!(this instanceof Foo)
に迷いがありました。return this
Foo