2012-04-07 2 views
2

私はこのようなFooコンストラクタ持っている:私はFooのコンストラクタにparamsの内容を確認したい、と何かが間違っている場合Javascriptで間違ったコンストラクタ引数を処理する方法は?

var foo = new Foo(someObject); 

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

Fooは、このように呼ばれています(例えば、params.xは数字ではなく、params.yundefinedです)、foonullとなります(これは、Fooオブジェクトは作成されませんでした)。

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

この問題を処理する方法を教えてください。

+1

[JavaScriptのコンストラクタが失敗した場合にはどうすればよいのですか]の複製(http://stackoverflow.com/questions/5149619/what-should-a-javascript-constructor-return-if-it-fails) –

答えて

4

私は例外をスローします。無効な入力は例外条件です。例外が発生すると意味があります。私はmakeFooラッパーでは気にしません。呼び出し側のコードがそれを処理する必要があります。


私はfooは(Fooオブジェクトが作成されなかったことを意味します)nullようにしたいと思います。

nullを返すnew Foo(...)式を作成する方法はありません。通常、new式の結果は、new演算子によって構築され、thisというコンストラクタ関数に渡されたオブジェクトへの参照です。コンストラクタ関数がそれを上書きし、別のオブジェクトを返しますが、nullを返すことで返すことはできません。コンストラクタ関数が何も返さないか、オブジェクトでないものを返した場合(null; nullNullというオブジェクトではありません)、typeof null"object"ですが、 new式の結果は、new演算子によって作成されたオブジェクトになります。セクション11.2.213.2.2の詳細

関連する問題