LINUX.ORG.RU

А зачем нужен Reflect?

 


0

1

Это чтобы не писать Object.protototype.<method>.apply?

Ну то есть я вижу по доке, что делает Reflect, но не совсем понимаю в чем смысл дословного копирования Object. Кто-нибудь в курсе, в чем заключалось обоснование когда draft проталкивали?

★★★★★

Последнее исправление: Vit (всего исправлений: 1)

ЯННП как оно выглядит то? И что это такое вообще? =) глянул на https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Reflect херня какато бесполезная. Вместо явного дёргания чего либо дёргается через посредника.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Во-первых при чем тут 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
()
Последнее исправление: javascript (всего исправлений: 1)
Ответ на: комментарий от Virtuos86

Кавайные утилиты, короче, без косяков и смс. Примерно как и думал. Спасибо за ссылку.

Vit ★★★★★
() автор топика
Ответ на: комментарий от javascript

В общем и целом - это сегрегация API, потому что это и правильно архитектурно и консистентно.

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

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Как раз таки наоборот! говноязычок обмазанный тонной библиотек без которых его нелепо использовать, пытаются превратить в язык, на котором можно просто программить.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Не может быть просто, когда все надо через внешние функции дергать. И держать в голове, что родные объекты кривые, а вот если создать или поюзать через библиотеку…

Это уёбищно.

Пипл по факту проталкивает второй [совершенно другой] язык под маркой первого. Причем поскольку первый уже занял все ништяки в синтаксисе, второму досталась дырка от бублика. А девелоперам движков - лютый пиздец с необходимостью точить JIT под прототипы, которые уже нафик никому не вперлись, но надо поддерживать для совместимости.

Но с профессиональной точки зрения, я конечно могу лепить продукт на любом говне, не особо парясь по этому поводу :)

Vit ★★★★★
() автор топика

если есть такой вопрос, то... наверное пока не нужен :)

slackwarrior ★★★★★
()
Ответ на: комментарий от Vit

Пипл по факту проталкивает второй [совершенно другой] язык под маркой первого.

Конечно и это особо не скрывается - делается привычный для масс язычок без прототипов и this магии. Если сразу выкатить js2.0 без обратной совместимости, то скорее всего будет как c perl6.

vtVitus ★★★★★
()

Даже несмотря на то, что я считаю, что в JS много недостатков и их нужно исправлять — я не вижу смысла делать интерфейсы Object «чуть лучше». Ну типа как если бы на улицах бомжи ели детей, а писатель стандартов возмущался, что эти бомжи потом разбрасывают кости где попало. Я даже знаю людей, которые по жизни такой херней занимаются, то есть, берут какую-то штуку с ничтожной значимостью, и «улучшают» ее, чтобы «сделать мир лучше».

byko3y ★★★★
()
Ответ на: комментарий от vtVitus

Конечно и это особо не скрывается - делается привычный для масс язычок без прототипов и this магии. Если сразу выкатить js2.0 без обратной совместимости, то скорее всего будет как c perl6

strict mode аналогично вводился, и оказался вполен успешен.

Впрочем, я замечу, что прототипы и this — это не самые проблемные фичи JS, их можно вообще избегать даже в текущей версии. Главное только не выполнять текст с левого хоста и не присваивать пришедший от пользователя JSON каким попало объектам.

byko3y ★★★★
()
Ответ на: комментарий от vtVitus

Дык не получится сделать хорошо, если за совместимость цепляться. Object.create(null) вместо {} выглядит кринжово. Symbol вместо приватов - вообще психоделика. И такое на каждом шаге.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.