javascript 中的 class 本质是构造函数,可直接传参;正确写法为 myfunc(myclass),接收方用 new 动态实例化,适用于工厂、插件注册等场景。

JavaScript 中的 Class 本身是函数(构造函数),所以可以直接作为参数传递,无需特殊处理。关键在于:你传的是类本身(即构造函数),不是它的实例;若需创建实例,由接收方决定何时、如何用 new 调用。
传 Class 构造函数本身
Class 在 JS 中本质是特殊的函数,因此可像普通函数一样传参——只需写类名,不加括号、不加 new:
- 错误写法:
myFunc(new MyClass())→ 传的是实例,不是类 - 错误写法:
myFunc(MyClass())→ 立即执行构造函数(通常报错) - 正确写法:
myFunc(MyClass)→ 传的是类定义(构造函数)
在函数内用 new 创建实例
接收方拿到 Class 后,可在内部用 new 实例化,甚至传入动态参数:
function createInstance(Constructor, ...args) {
return new Constructor(...args);
}
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const p = createInstance(Person, "Alice", 30); // ✅ 正确:new Person("Alice", 30)
console.log(p.name); // "Alice"
传 Class 并延迟/条件实例化
适合工厂、插件注册、策略选择等场景。接收方可以暂存 Class,按需调用:
- 保存类用于后续创建多个实例
- 根据条件决定是否实例化(如权限校验后才初始化)
- 配合依赖注入容器使用
示例:
const registry = {};
function registerType(name, Cls) {
if (typeof Cls === 'function' && Cls.name) {
registry[name] = Cls;
}
}
registerType('user', Person);
// 后续某处
if (registry.user) {
const user = new registry.user("Bob", 25);
}
注意与实例传参的区别
Class 作为参数 ≠ 实例作为参数:
- 传 Class:获得「制造对象的能力」,控制权在接收方
- 传实例:获得「已存在的对象」,状态和行为已确定
- 检查方式:
typeof MyClass === 'function',而typeof new MyClass() === 'object'
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











