Где между ними разница не считая того, что 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
Заранее спасибо!