JackShcherbakov
@JackShcherbakov

Где разница между Error.captureStackTrace(this, PropertyError); и (new Error()).stack?

Где между ними разница не считая того, что 2-ая из этих функций только в V8 работает? Есть код (взято с https://learn.javascript.ru/oop-errors). Тут в строке 1 используется Error.captureStackTrace(this, PropertyError); в строке 2 исользуется (new Error()).stack
function PropertyError(property) {

  this.name = "PropertyError";

  this.property = property;
  this.message = "Ошибка в свойстве " + property;

  if (Error.captureStackTrace) {
    Error.captureStackTrace(this, PropertyError); //(1)
  } else {
    this.stack = (new Error()).stack; //(2)
  }

}

PropertyError.prototype = Object.create(Error.prototype);

Как я понял 1-ая используется только в случае ее поддержки, иначе используется 2-ая функция. Но все равно не понятно, почему с такой проверки в том же Яндексе этот код работает также как и в гугле?

Вот код для теста
​function PropertyError(property) {

  this.name = "PropertyError";

  this.property = property;
  this.message = "Ошибка в свойстве " + property;

  if (Error.captureStackTrace) {
    Error.captureStackTrace(this, PropertyError);
  } else {
    this.stack = (new Error()).stack;
  }

}

PropertyError.prototype = Object.create(Error.prototype);
var error = new PropertyError('name');
alert(error.stack);

И еще, почему при вызове alert(error); вызывается error.message?
Вот код в песочнице https://codepen.io/CitizenOne/pen/pdGGMJ?editors=1010
Заранее спасибо!
  • Вопрос задан
  • 308 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы