История изменений
Исправление javascript, (текущая версия) :
Во-первых при чем тут Object.protototype.? Reflect реализует статические методы конструктора Object, а не из прототипа.
Во-вторых у них более строгое поведение в отличии от тех, что у Object - они кидают исключения в случае если передано что-то не то.
В-третьих там не тупое дублирование, но и есть (и будут добавляться в будущем) дополнительные методы рефлексии. Сейчас, например, есть Reflect.construct - который позволяет использовать конкретный конструктор с кастомной цепочкой прототипов.
В общем и целом - это сегрегация API, потому что это и правильно архитектурно и консистентно. От того, что многие методы рефлексии исторически находятся в статических методах Object уже нарушена консистентность объектной модели. Ибо class A extends B - конструктор A наследует в том числе статические методы конструктора B, и цепочку прототипов. В то же время class {} - наследует только Object.prototype в цепочку инстанса, но не статические методы базового конструктора. Был бы Reflect изначально этого не случилось бы.
Ну и наконец не только Object - там уже есть apply, и планируют завести hasOwn, чтобы не засирать код везде и всюду конструкциями вида Object.prototype.hasOwnProperty.call(target, key) и Function.prototype.apply.call(target, ctx, args)
Кто-нибудь в курсе, в чем заключалось обоснование когда draft проталкивали?
Reflect запиливали тандемом с Proxy API. В Reflect содержатся все перехватываемые прокси-хэндлером сообщения, чтобы их дергать из этого самого хэндлера.
Исходная версия javascript, :
Во-первых при чем тут Object.protototype.? Reflect реализует статические методы конструктора Object, а не из прототипа.
Во-вторых у них более строгое поведение в отличии от тех, что у Object - они кидают исключения в случае если передано что-то не то.
В-третьих там не тупое дублирование, но и есть (и будут добавляться в будущем) дополнительные методы рефлексии. Сейчас, например, есть Reflect.construct - который позволяет использовать конкретный конструктор с кастомной цепочкой прототипов.
В общем и целом - это сегрегация API, потому что это и правильно архитектурно и консистентно. От того, что многие методы рефлексии исторически находятся в статических методах Object уже нарушена консистентность объектной модели. Ибо class A extends B - конструктор A наследует в том числе статические методы конструктора B, и цепочку прототипов. В то же время class {} - наследует только Object.prototype в цепочку инстанса, но не статические методы базового конструктора. Был бы Reflect изначально этого не случилось бы.
Ну и наконец не только Object - там уже есть apply, и планируют завести hasOwn, чтобы не засирать код везде и всюду конструкциями вида Object.prototype.hasOwnProperty.call(target, key) и Function.prototype.apply.call(target, ctx, args)