- 1
- 2
- 3
function isNative (Ctor){
return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
function isNative (Ctor){
return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
}
https://habr.com/ru/company/ruvds/blog/503634/
>>> 5 интересных JavaScript-находок, сделанных в исходном коде Vue
Пиздец, блядь.
Действительно, нахуя нам кэшировать 0, null, undefined, false, '' и NaN?
Ведь если придираться, то тут второй и далее аргументы не учитываются.
Ну и с функциями как аргументами и прочей плохо сериализуемой питушнёй была бы питушня.
И arg != '' ещё.
Для пустой строки, так же как и для других не-идентификаторов сложновато будет получить значение через оператор "точка", но это и не нужно.
Ну всё-таки не линейным обходом кеша проверяют, и на том счастье.
Считаю, что нормальный код. Хотя с бы матчил /^\[object (.*?\]$/ для надёжности.
А вот с /native code/ - жопа, да. Там необходимо матчить более строго, иначе нормальные функции могут случайно задетектиться.
> Там необходимо матчить более строго, иначе нормальные функции могут случайно задетектиться.
А как матчить более строго, если «userFunction.bind(hui).toString()» выдаёт «native code»?
Про выхлоп bind писал ниже: формально он выдаёт нативный код. Функциушня рождает много философских вопросов и проблем с сериализацией.
А помните arguments.callee/caller? Их же вроде выпилили ради оптимизации хвостовой питушни.
Ну вот, а оно отсутствует. В результате нормальных, немакаковых способов получить этот самый raw type просто нет (или я о нём не знаю?).
Где-то мельком читал, что callee/caller удолили ради какой-то там безопасности, хотя верится с трудом. Хвостовая рекурсня выглядит правдоподобнее.
Какая архитектура )))
Какой прекрасный, консистентный язык!
Кстати, вопрос к знатокам прекрасного языка: можно без таких уёбищных хаков определить, что объект является, например, RegExp'ом?
P.S. А для массива - Array.isArray.
Впрочем, справедливости ради, «Python» тоже посасывает: проверка на функцию там делается через «callable(obj)».
Хотя, вообще всё это - рефлектушня со всеми вытекающими. Отдельный вопрос нужно задать программисту - что в его программе делают питушни, типы которых он не знает.
https://ideone.com/7DvWYl
.