Здравствуйте, rFLY, Вы писали:
FLY>Здравствуйте, Codealot, Вы писали:
C>>Мда, ну и муть.
FLY>Почему же, просто какой-то косяк в движке. Причем связанный с обращением к статическому свойству в конструкторе через имя класса:
Это не косяк, это тот же lookup, что и с поиском в глобальном скопе
Вот смотрите — если вместо
class BaseClass написать
const BaseClass = class { ... то получится ровно то же, что и у вас
Смотрите сами
без создания объекта
var_: 67.20000000018626
prop: 208.29999999981374
с созданием объекта
var_: 89.90000000037253
prop: 203.90000000037253
Собственно, если просто заверуть всё в функцию, это ничем не помогает. Все дело именно в том, куда запихивается class BaseClass. Похоже, это какой то конский объект.
А вот объявление класса через const меняет дело
const BaseClass = class
{
constructor()
{
this.Value = BaseClass.Counter++;
}
TestMethod()
{
return this.Value;
}
static Counter = 0;
}
console.log("без создания объекта");
{
let watch = performance.now();
let sum = 0;
for (let i = 0; i < 100_000_000; i++)
sum += i;
console.log(`var_: ${performance.now() - watch}`);
}
{
let watch = performance.now();
let o = {sum: 0};
for (let i = 0; i < 100_000_000; i++)
o.sum += i;
console.log(`prop: ${performance.now() - watch}`);
}
console.log("с созданием объекта");
{
let watch = performance.now();
let sum = 0;
for (let i = 0; i < 100_000_000; i++) {
new BaseClass();
sum += i;
}
console.log(`var_: ${performance.now() - watch}`);
}
{
let watch = performance.now();
let o = {sum: 0};
for (let i = 0; i < 100_000_000; i++) {
new BaseClass();
o.sum += i;
}
console.log(`prop: ${performance.now() - watch}`);
}