2

次のFooようなコンストラクタがあります。

function Foo(params) {
  this.x = params.x + 5;
  ...  
}

Fooは次のように呼び出されます。

var foo = new Foo(someObject);

paramsinのコンストラクターの内容を確認したいのですFooが、何か問題がある場合 (たとえばparams.x、 が数値ではない、またはparams.yが であるundefined)、そうなってしまいfooますnull(これは、オブジェクトが作成されなかったことを意味しFooます)。

1 つのオプションは、コンストラクターで例外をスローし、with の呼び出しをラップするnew Foo(someObject)(try..catchまたはそのような関数を作成するmakeFoo) ことだと思います。

この問題をどのように処理することをお勧めしますか?

4

1 に答える 1

4

例外をスローします。無効な入力は例外条件であり、例外をスローすることは理にかなっています。makeFoo私はラッパーを気にしません。呼び出し元のコードがそれを処理する必要があります。


私はなりたいですfoonullこれは、オブジェクトが作成されなかったことを意味しFooます)。

new Foo(...)式にを返す方法はありませんnull。通常、式の結果は、演算子によって作成され、コンストラクター関数にとして渡されnewたオブジェクトへの参照です。コンストラクター関数それをオーバーライドして別のオブジェクトを返すことができますが、を返すことによってそれを行うことはできません。コンストラクター関数が何も返さない場合、またはオブジェクトではないものを返す場合(;を含まない;オブジェクトではない[それは独自の型を持っている]であるにもかかわらず)、式の結果は次のようになります。オペレーターによって作成されたオブジェクトである。セクション11.2.2および13.2.2の詳細newthisnullnullnullNulltypeof null"object"newnew

于 2012-04-07T12:13:10.423 に答える