-1

javascript で例外をスローしようとしています。例外にメッセージと一緒に番号を付けようとしていますが、メッセージだけを取得していて、番号を取得していないのはなぜですか? 私は何を間違っていますか?私のコードは次のとおりです。

function ain()
{
    var e = new Error("hello guys" ,12345);
    throw e;
}

(function() {
    try {
       ain();
    }
    catch(e) {
        alert(e.number+"     "+e.message);
    }
}());

出力は次のとおりです。

undefined     hello guys
4

4 に答える 4

2

行番号ではない番号を2番目のパラメーターとして渡したい場合は、メインのErrorプロトタイプから継承する新しいエラータイプの作成を検討することをお勧めします。

function MyError(msg, num)
{
    this.name = 'MyError';
    this.message = msg;
    this.number = num || 0;
}
MyError.prototype = new Error;
MyError.prototype.constructor = MyError;
//and if you want:
MyError.prototype.alertMsg = function()
{
    alert(this.name + ': ' + this.message + ' -- ' + this.number);
};

この拡張エラーオブジェクトは、必要に応じて使用できます。

function iThrow()
{
    throw new MyError('I throw errors with numbers', 123);
}
try
{
    iThrow();
}
catch(e)
{
    e.alertMsg();//alerts "MyError: I throw errors with numbers -- 123"
}
于 2013-03-21T13:37:04.207 に答える
2

Errorコンストラクター関数は「数値」プロパティを取りません。文字列メッセージのみを受け取ります (他の 2 つのパラメーターは非標準であるため、言及しません)。

完全にカスタマイズされたエラー オブジェクトを本当に使用する必要がある場合は、エラーの代わりにオブジェクト リテラルをスローできます。

try {
    throw { message: 'hello world', number: 12345};
} catch(e) {
    console.log(e.number + ': ' + e.message);
}

http://jsfiddle.net/FHc7v/1/

于 2013-03-21T13:26:17.870 に答える
0

詳細については、こちらを参照してください。これはブラウザ固有のものでもあります。

http://help.dottoro.com/ljfhismo.php

于 2013-03-21T13:22:43.627 に答える
-1

このメソッドの説明を見ると、2 番目のパラメーターは番号ではなくファイル名であり、3 番目のオプションはエラー コードではなくエラーの行番号であることがわかります。

new Error([message[, fileName[, lineNumber]]])
于 2013-03-21T13:21:48.707 に答える