Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Наследование от встроенного Error (https://javascript.ru/forum/misc/25285-nasledovanie-ot-vstroennogo-error.html)

khusamov 31.01.2012 18:49

Наследование от встроенного Error
 
Здравствуйте!

Верно я сделал наследование от Error?

var Norkpalm_Error = function(message) {
	this.message = message;
	this.code = null;
	this.stack = (new Error()).stack;  
};

Norkpalm_Error.prototype = new Error();

9xakep 31.01.2012 20:22

Если не ошибаюсь, то будет так:
Error.prototype.Norkpalm_Error = Norkpalm_Error
и в результате:
error.Norkpalm_Error()

vasa_c 31.01.2012 22:16

1. Не здорово наследоваться от рабочего конструктора, лучше пустой временный создать:
Norkpalm_Error.prototype = (function () {
    var Fake = function () {}; // фейковый конструктор
    Fake.prototype = Error.prototype;
    return (new Fake);
}());


2. Имя желательно задать, чтобы не видеть безликий "Error":
Norkpalm_Error.prototype.name = "Norkpalm_Error";


3. Из стека вырезать первую строку, потому что она будет указывать на строку с new Error:

this.stack = (new Error()).stack.replace(/^.*?\n/, "");

про все браузеры не знаю, правда, здесь

khusamov 01.02.2012 01:43

Спасибо за ответ!

Вот так у меня получилось:

var Norkpalm_Error = function(message) {
	this.message = message;
	this.code = null;
	this.stack = (new Error()).stack.replace(/^.*?\n/, "");
};

Norkpalm_Error.prototype = (function () {
   var Fake = function () {};
   Fake.prototype = Error.prototype;
   return (new Fake);
}());

Norkpalm_Error.prototype.name = "Norkpalm_Error";


Верно?

Сейчас пойду у себя в проекте проверять)

Gvozd 01.02.2012 01:57

Цитата:

Сообщение от vasa_c
Не здорово наследоваться от рабочего конструктора, лучше пустой временный создать:

почему?

vasa_c 01.02.2012 08:42

Цитата:

Сообщение от Gvozd (Сообщение 154417)
почему?

потому что конструктор может производить какие-либо инициализирующие действия для экземпляра, которые при создании прототипа излишни. здесь нам конструктор нужен только чтобы связаться с родительским прототипом.

Livaanderiamarum 01.02.2012 08:55

обычные люди боятся __proto__
назовите браузеры или движки которые его не поддерживают?

Очевидно что нужно "верстать" не под стандарт, а под реализации.

Shaci 01.02.2012 13:25

Цитата:

Сообщение от Livaanderiamarum (Сообщение 154455)
обычные люди боятся __proto__
назовите браузеры или движки которые его не поддерживают?

Очевидно что нужно "верстать" не под стандарт, а под реализации.

вроде ie, только не помню ввели ли поддержу в восьмом или нет

Gvozd 01.02.2012 13:32

Цитата:

Сообщение от Shaci
вроде ie, только не помню ввели ли поддержу в восьмом или нет

в нем еще нет


Часовой пояс GMT +3, время: 03:45.