Сравнение нативных типов JavaScript, Class такое же, как {}? - PullRequest
0 голосов
/ 03 июля 2019

Я пишу несколько тестов о сравнении Class и Object в Javascript. И у меня есть некоторые сомнения по поводу реальной цели с Class в JS.

Если все object (кроме типов примитивов), правильно указать, что:

class Foo {
    static anyFunc () {}
}
const FooInstance = new Foo();

равно

const FooInstance = {
    anyFunc () {}
}

Как я могу измерить производительность / выделенную память / размер этих реализаций? Может быть в C ++ или JS.

Большое спасибо!

1 Ответ

2 голосов
/ 03 июля 2019
const FooInstance = {
    anyFunc () {}
}

FooInstance в данном случае является непосредственно экземпляром Object.Если вы посмотрите на его цепочку прототипов, она сразу же Object.Метод anyFunc будет найден в самом экземпляре.

class Foo {
  static anyFunc () {}
}
const FooInstance = new Foo();

FooInstance в этом случае является экземпляром FooObject тоже, поскольку все объекты происходят от него).Если вы посмотрите на свою цепочку прототипов, то сначала у нее будет прототип Foo, а затем прототип Object.Кроме того, anyFunc не является методом в экземпляре (ни прототипом).Он будет прикреплен к самому конструктору (то есть Foo.anyFunc() или FooInstance.constructor.anyFunc(), но не FooInstance.anyFunc()).

Короче говоря, нет.Они не равны.

Визуально цепочка будет выглядеть следующим образом:

// First case:
instance ---> Object.prototype
- anyFunc

// Second case:
instance -> Foo.prototype -------> Object.prototype
            - constructor (Foo)
              - anyFunc

Как измерить производительность / выделенную память / размер этих реализаций?

Это ничтожно мало.Не беспокойся об этом.Или беспокоиться об этом, только когда это становится проблемой.

...