Как создавать, проектировать и создавать встроенные объекты Error - PullRequest
1 голос
/ 31 октября 2011

UPDATE


[Переписывая вопрос, чтобы сосредоточиться на проблеме, которую я пытаюсь понять.]

Есть ли в JavaScript средство для выдачи исключений, уведомляющих номер строки, где возникает проблема? Подобно отладчику C #, если в строке 50 выдается ошибка, я перейду к строке 50.

Например, согласно MDN EvalError представляет ошибку с eval(). Итак, допустим, у меня есть функция, которая использует eval(). Я хочу использовать конкретную ошибку, характерную для рассматриваемой проблемы, EvalError:

//As written here the error implies there is a problem on this line.  See Firebug console window
var evalErra = new EvalError('required element missing from evaluation');

var stringFunc = "a=2;y=3;document.write(x*y);";

EvalString(stringFunc);

function EvalString(stringObject) {
    //Some arbitrary check, for arguments sake let's say checking for 'x' makes this eval() valid.
    if(stringObject.indexOf('x') !== -1) {
        throw evalErra;
        //throw 'required element missing from evaluation';//This way offers no line number
    }
    eval(stringFunc);//The problem really lies in the context of this function.
}

Если я все делаю неправильно, то, пожалуйста, скажите мне, как мне следует подходить к таким вопросам.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

При обработке ошибок вы хотите сделать следующее

throw new Error("message");

Тогда, если вы когда-нибудь справитесь с этой ошибкой, посмотрите на err.stack (firefox / opera / chrome) или err.line (Safari) или err.IE_Y_U_NO_SHOW_ME_ERROR_LINE_NUMBER (IE), чтобы найти номер строки.

Если вы хотите, вы можете подкласс Error.

1 голос
/ 31 октября 2011

Когда вы выдаваете ошибку, выполнение текущего кода останавливается, и JS будет возвращаться к дереву выполнения до тех пор, пока не найдет catch (), который обрабатывает конкретный тип выдаваемой ошибки или не получает его полностью. к вершине дерева, вызывая ошибку «необработанное исключение»: вы выдавали ошибку, и ничто не ловило ее, и теперь чье-то окно сломалось.

try {
   if (true) {
      throw 'yup'
   }
} catch (e) { // catches all errors
   ... handle the error
}
...