当前位置:首页 > JavaScript

js .isfunction 实现

2026-04-06 14:31:48JavaScript

在 JavaScript 中,可以通过多种方式实现类似 isFunction 的功能来检测一个变量是否为函数类型。以下是几种常见的实现方法:

使用 typeof 操作符

typeof 操作符是检测函数类型的最简单方法。函数在 JavaScript 中被归类为对象,但 typeof 可以区分函数和其他对象类型。

js .isfunction 实现

function isFunction(obj) {
    return typeof obj === 'function';
}

使用 instanceof 操作符

instanceof 操作符可以检查对象的原型链中是否存在 Function 构造函数。这种方法适用于检查显式定义的函数。

function isFunction(obj) {
    return obj instanceof Function;
}

使用 Object.prototype.toString

Object.prototype.toString 方法可以返回对象的类型字符串,对于函数会返回 [object Function]

js .isfunction 实现

function isFunction(obj) {
    return Object.prototype.toString.call(obj) === '[object Function]';
}

使用 Function.prototype.isPrototypeOf

Function.prototype.isPrototypeOf 可以检查对象的原型链中是否包含 Function.prototype

function isFunction(obj) {
    return Function.prototype.isPrototypeOf(obj);
}

注意事项

  1. 箭头函数:上述方法对箭头函数同样有效,因为箭头函数也是 Function 的实例。
  2. 跨框架问题:在多个 iframe 或窗口环境中,instanceof 可能会失效,因为每个环境有独立的 Function 构造函数。此时推荐使用 typeofObject.prototype.toString
  3. 性能typeof 的性能通常最好,因为它是语言内置的直接操作。

示例代码

以下是一个综合示例,展示如何使用这些方法检测函数:

const func = () => {};
const notFunc = {};

console.log(typeof func === 'function'); // true
console.log(func instanceof Function); // true
console.log(Object.prototype.toString.call(func) === '[object Function]'); // true
console.log(Function.prototype.isPrototypeOf(func)); // true

console.log(typeof notFunc === 'function'); // false
console.log(notFunc instanceof Function); // false

选择哪种方法取决于具体需求,大多数情况下 typeof 已经足够。

标签: jsisfunction
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…