Почему не использовать «новый» влияет на производительность в Javascript - PullRequest
0 голосов
/ 10 июля 2019

Ссылка ниже объясняет, что происходит, когда мы используем ключевое слово "new" https://www.tutorialsteacher.com/javascript/new-keyword-in-javascript.

IE. Я могу объявить object1 для некоторой случайной функции конструктора ниже.

const object1 = new ConstructorFunction(1,2,3)

Однако, если я, очевидно, скопирую код с кодом ниже,

const _object1 = {};

_object1.__proto__ = ConstructorFunction.prototype;

const object1 = ConstructorFunction.call(_object1,1,2,3);

тогда, очевидно, у этого кода будут проблемы с производительностью, так как я изменил [[prototype]] во время выполнения (это предупреждение также дано для MDN в разделе об измененииobjects [[prototype]]. В основном это говорит о том, что это не должно быть сделано.) Мне сказали, что я могу обойти это, изменив код выше на.

 const _object1 = Object.create(ConstructorFunction.prototype);

 const object1 = ConstructorFunction.call(_object1,1,2,3);

Так что я не уверен, почему "Object.create" лучше.Я получаю, что создаю пустой объект с требуемым [[prototype]], а не создаю нормальный объект, а затем изменяю его [[prototype]], так что это быстрее.Однако очевидно, что создание пустого объекта с требуемым [[prototype]] означает создание обычного пустого объекта, а затем его изменение вручную.Так что предположительно исходный код Object.create выглядит примерно так:

const Object.create = function(prototype) {
  const newObject = {};
  newObject.__proto__ = prototype;
  return newObject;
};

Это почти то же самое, что я делал изначально, за исключением того, что оно заключено в функцию.В основном, почему мой реплицированный код имеет проблемы с производительностью?Это потому, что Object.create использует меньше ресурсов, когда он вызывается непосредственно в исходных файлах C / C ++ движка, а не подражает во время выполнения в Javascript?

...