- 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
gost 26.05.2020 11:46 # +2
Пиздец, блядь.
gost 26.05.2020 11:59 # +1
Действительно, нахуя нам кэшировать 0, null, undefined, false, '' и NaN?
1024-- 26.05.2020 12:26 # 0
Ведь если придираться, то тут второй и далее аргументы не учитываются.
Ну и с функциями как аргументами и прочей плохо сериализуемой питушнёй была бы питушня.
bormand 26.05.2020 20:14 # 0
И arg != '' ещё.
1024-- 26.05.2020 20:25 # 0
Для пустой строки, так же как и для других не-идентификаторов сложновато будет получить значение через оператор "точка", но это и не нужно.
bormand 26.05.2020 20:26 # 0
1024-- 26.05.2020 20:30 # +1
bormand 26.05.2020 20:46 # +2
guest8 27.05.2020 00:52 # −999
KOPOHABuPYC 27.05.2020 00:57 # 0
bootcamp_dropout 26.05.2020 19:52 # +1
bormand 26.05.2020 20:13 # +1
Ну всё-таки не линейным обходом кеша проверяют, и на том счастье.
bootcamp_dropout 26.05.2020 20:16 # +2
bormand 26.05.2020 20:19 # +2
1024-- 26.05.2020 20:26 # 0
bormand 26.05.2020 12:07 # 0
gost 26.05.2020 12:10 # +1
1024-- 26.05.2020 12:17 # +1
Считаю, что нормальный код. Хотя с бы матчил /^\[object (.*?\]$/ для надёжности.
А вот с /native code/ - жопа, да. Там необходимо матчить более строго, иначе нормальные функции могут случайно задетектиться.
gost 26.05.2020 12:24 # +2
> Там необходимо матчить более строго, иначе нормальные функции могут случайно задетектиться.
А как матчить более строго, если «userFunction.bind(hui).toString()» выдаёт «native code»?
1024-- 26.05.2020 12:28 # 0
Про выхлоп bind писал ниже: формально он выдаёт нативный код. Функциушня рождает много философских вопросов и проблем с сериализацией.
gost 26.05.2020 12:34 # 0
1024-- 26.05.2020 12:40 # 0
А помните arguments.callee/caller? Их же вроде выпилили ради оптимизации хвостовой питушни.
gost 26.05.2020 12:46 # 0
Ну вот, а оно отсутствует. В результате нормальных, немакаковых способов получить этот самый raw type просто нет (или я о нём не знаю?).
Где-то мельком читал, что callee/caller удолили ради какой-то там безопасности, хотя верится с трудом. Хвостовая рекурсня выглядит правдоподобнее.
bormand 26.05.2020 12:45 # 0
gost 26.05.2020 12:55 # +1
bormand 26.05.2020 12:57 # +2
Какая архитектура )))
guest8 26.05.2020 12:58 # −999
bormand 26.05.2020 13:03 # +1
gost 26.05.2020 12:14 # +2
Какой прекрасный, консистентный язык!
Кстати, вопрос к знатокам прекрасного языка: можно без таких уёбищных хаков определить, что объект является, например, RegExp'ом?
1024-- 26.05.2020 12:22 # 0
P.S. А для массива - Array.isArray.
gost 26.05.2020 12:29 # +1
Впрочем, справедливости ради, «Python» тоже посасывает: проверка на функцию там делается через «callable(obj)».
jojaxon 26.05.2020 12:31 # +1
gost 26.05.2020 12:37 # 0
1024-- 26.05.2020 12:36 # 0
Хотя, вообще всё это - рефлектушня со всеми вытекающими. Отдельный вопрос нужно задать программисту - что в его программе делают питушни, типы которых он не знает.
ropuJIJIa 27.05.2020 02:01 # 0
ropuJIJIa 26.05.2020 12:04 # +1
https://ideone.com/7DvWYl
bormand 26.05.2020 12:06 # 0
gost 26.05.2020 12:08 # +1
.
jojaxon 26.05.2020 12:09 # +4
phpBidlokoder2 26.05.2020 13:04 # −2
Fike 26.05.2020 16:36 # +1
1024-- 26.05.2020 12:20 # +1
bagrinho 27.05.2020 00:56 # 0
bootcamp_dropout 26.05.2020 23:22 # 0
KOPOHABuPYC 27.05.2020 00:23 # 0
bagrinho 27.05.2020 00:56 # 0