Ссылка ниже объясняет, что происходит, когда мы используем ключевое слово "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?