箭头函数不能作为构造函数,因其无prototype属性,调用new会报TypeError;但适合在构造函数或class中作this绑定的回调,严格模式对其无影响。

箭头函数不能用作构造函数,严格模式下也一样——它没有 prototype,调用 new 会直接报错:TypeError: Arrow functions are not constructors。所以“用箭头函数作为构造函数”本身是不可行的,无论是否开启严格模式。
构造函数必须是普通函数(或 class)
只有具有 prototype 属性、且能被 new 调用的函数,才能作为构造函数:
- 传统 function 声明/表达式 ✅
-
class声明 ✅(本质是语法糖,底层仍是函数) - 箭头函数 ❌(无
prototype,无arguments,无this绑定机制)
箭头函数适合用在构造函数内部作回调(尤其是 this 绑定)
这是常见且推荐的做法:在构造函数中定义箭头函数作为事件处理、定时器、Promise 回调等,避免 this 指向丢失:
function Person(name) {
this.name = name;
// ✅ 箭头函数自动捕获外层 this(即实例)
this.greetLater = () => {
console.log(`Hello, I'm ${this.name}`);
};
}
const alice = new Person('Alice');
setTimeout(alice.greetLater, 1000); // 正确输出 "Hello, I'm Alice"
对比普通函数方式需手动绑定:this.greetLater = this.greetLater.bind(this) 或在调用时 setTimeout(() => this.greetLater(), 1000)。
立即学习“Java免费学习笔记(深入)”;
严格模式对箭头函数回调的影响很小
严格模式主要影响:this 在非箭头函数中为 undefined、禁止静默失败赋值、限制 arguments 等。但箭头函数本身不绑定 this,也不受这些规则约束——它的 this 始终由外层作用域决定,严格与否都不改变行为。所以你在构造函数里写箭头回调,开不开严格模式,效果一致。
如果想封装“可实例化 + 内置箭头方法”的逻辑
可以结合 class 和类字段(public class fields),这是现代常用写法(需环境支持):
class Person {
constructor(name) {
this.name = name;
}
// ✅ 类字段 + 箭头函数 → 自动绑定 this,无需 bind
greetLater = () => {
console.log(`Hello, I'm ${this.name}`);
};
}
注意:该语法本质是在实例上创建属性(而非原型上),每次 new 都新建函数,有轻微内存开销;若方法不依赖实例状态,仍建议放原型上(用普通方法)。


















