Loading...
yavor2000 avatar yavor2000 114 Точки

[Technical Issue] WebStorm + Node.js не може да дебъгва когато екстендвам Object.prototype

Когато дебъгвам с node.js в WebStorm и ползвам наследяване по този начин

Object.prototype.inherit = function (parent) {
this.prototype = Object.create(parent.prototype);
this.prototype.constructor = this;
};
сторма дава "Cannot stop on breakpoint due to internal error". Във същото време програмата работи коректно - само не може да се дебъгва!

След доста ровене в нета не намерих никой друг с такъв проблем. Също така ако закача скрипта към html и дебъгвам през chrome не само работи, но и се дебъгва без проблем. Явно проблема е в WebStorm и/или node.js.

Някой друг натъкнал ли се е на този проблем?

Ако да - ето до какво решение стигнах - закачваме inherit към Object с defineProperty:

Object.defineProperty(Object.prototype, "inherit", {
value: function (parent) {
this.prototype = Object.create(parent.prototype);
this.prototype.constructor = this;
}
});
По незнайни причини последното се дебъгва нормално в WebStorm дори само с node.js

3
JavaScript Advanced 06/11/2014 11:10:03
petrovaliev95 avatar petrovaliev95 358 Точки

Пробвай да правиш наследяване с това:  
    

NameOfClass.prototype = Object.create(NameOfParentClass.prototype);

 

 

1
RoYaL avatar RoYaL Trainer 6849 Точки

this.prototype = Object.create(parent.prototype);

Не резултира ли до точно това?

0
petrovaliev95 avatar petrovaliev95 358 Точки

Точно това е, но в случая той закача "inherit" на прототипа на "Object" и може от там нещо да се омазва при дебъгване.

1
RoYaL avatar RoYaL Trainer 6849 Точки

Да де, ама не е правилното решение да пробва да прави наследяване така, след като иска да си спести работа и да абстрактне наследяването. Всмисъл такъв, заради едното дебъгване, го караш да махне абстракцията и за всеки клас по отделно да пише Object.create.

Най-вероятно node-а не разбира от това да добавяш към built-in типовете подобни неща. До колкото прочитам целия пост с defineProperty() работи супер. 

0
petrovaliev95 avatar petrovaliev95 358 Точки

Идеята беше да види дали така ще работи и дали е проблема в това. :)

1
yavor2000 avatar yavor2000 114 Точки

Да - работи, но както каза RoYaL - грешно е да губим абстракцията по този начин. Явно проблема е в webstorm / node.js но е странно че съществува и че не е отстранен (пробвах го на webstorm 8.0.3 и на 9.0.1, както и с две версии на node.js)
А и по-важното е че има walk-around :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.