В процессе разработки веб-приложений или сайтов может возникнуть вопрос: как определить, является ли та или иная функция нативной (встроенной) или была создана непосредственно разработчиком? В JavaScript существует простой способ отличить нативные функции от кастомных.
Типы функций в JavaScript
В JavaScript функции можно разделить на два основных типа:
- Нативные функции — встроенные функции, которые предоставляются средой выполнения JavaScript.
- Кастомные функции — функции, созданные разработчиками или поль
Как отличить нативную функцию от кастомной?
.toString()
Одним из способов отличить нативную функцию от кастомной является преобразование функции в строку с помощью метода "[native code]"
, тогда как кастомные функции возвращают свой исходный код.
Рассмотрим несколько примеров:
console.log.toString();
// "function toString() { [native code] }"
Array.isArray.toString();
// "function isArray() { [native code] }"
function SayHi() {
console.log('Hi');
}
SayHi.toString();
// "function SayHi() { console.log('Hi') }"
Из примеров видно, что при преобразовании нативных функций, таких как console.log
и Array.isArray
, метод toString()
возвращает строку с включением "[native code]"
. В то время как кастомная функция SayHi
возвращает свой исходный код.
Как создать функцию для проверки типа функции
Зная этот механизм, можно создать простую функцию, которая будет определять, является ли переданная функция нативной:
function isNative(func) {
return typeof func === 'function' && /\[native code\]/.test(func.toString());
}
Эта функция принимает другую функцию в качестве аргумента и проверяет два условия:
- Является ли переданный аргумент функцией (
typeof func === 'function'
).
- Содержит ли строковое представление функции фразу
"[native code]"
.
Если оба условия выполняются, функция возвращает true
, указывая на то, что переданная функция является нативной.
Заключение
Определение типа функции в JavaScript может быть важным инструментом в арсенале разработчика. Используя метод toString()
и простую проверку на наличие "[native code]"
, можно легко определить, является ли функция встроенной или созданной пользователем.