Метод valueOf
, который вы упомянули в своем ответе , не будет работать так, как вы его упомянули.
Function.prototype
не имеет метода valueOf
, он наследуется от Object.prototype
, и этот метод просто возвращает тот же объект функции, где вы его вызываете :
Function.valueOf() === Function; // true
Я думаю, вы путаете его с методом toString (или вы предупреждаете о вызове метода valueOf, который вызывает в большинстве браузеров неявное преобразование ToString).
Однако вы можете использовать метод toString
непосредственно для объектов функций, а в почти всех реализациях вернет вам строковое представление, содержащее "[native code]"
в теле функции, я бы не рекомендовал это слишком много, потому что метод Function.prototype.toString
зависит от реализации ...
function isNative(fn) {
return /native code/.test(fn.toString);
}
isNative(Function); // true
isNative(function () {}); // false
Еще раз советую вам, что есть некоторые браузеры, которые будут возвращать разные результаты при использовании метода toString
для функций, например, некоторые мобильные браузеры будут возвращать одну и ту же строку для любого объекта функции.