箭头函数没有 prototype 属性,不参与原型链,不能用 new 调用,也不绑定 this;普通函数则具备 prototype,支持构造函数、原型继承及 this 动态绑定。

箭头函数与函数对象原型之间**没有绑定关系**——它根本**不参与原型链**,也不具备 prototype 属性。
箭头函数没有 prototype
普通函数(Function Declaration / Function Expression)在创建时会自动拥有一个 prototype 属性,指向一个可被实例继承的对象,这是实现构造函数和原型继承的基础。
而箭头函数是语法糖,本质是表达式,它没有 prototype 属性,也不能用 new 调用:
-
function foo() {}→foo.prototype存在,类型为 object -
const bar = () => {}→bar.prototype是 undefined -
new bar()会直接抛出TypeError: bar is not a constructor
箭头函数不绑定 this,也不绑定原型
箭头函数的 this 是词法继承的,它不创建执行上下文,因此也不建立自己的原型链上下文。它不会像普通函数那样在调用时产生 [[Prototype]] 链接,也不会出现在任何对象的 __proto__ 或 Object.getPrototypeOf() 查询路径中。
例如:
const obj = {
name: 'Alice',
regular() { return this.name; },
arrow: () => this.name
};
obj.regular(); // 'Alice' —— this 指向 obj,regular 函数有 prototype(但此处未用)
obj.arrow(); // 可能是 undefined 或全局 name —— this 继承自外层,且 arrow 无 prototype
原型链中的方法不能是箭头函数
如果你把箭头函数写在 class 或对象原型上(比如 MyClass.prototype.method = () => {}),它虽然能运行,但this 不会指向实例,因为它不遵循隐式绑定规则。更严重的是,这种写法违背设计意图:
- 箭头函数无法通过
obj.method.call(instance, ...)控制 this - 它无法被子类通过 super 调用(因为没 prototype 链)
- 它不支持
bind/call/apply改变 this(this 已静态锁定)
真正参与原型链的是普通函数
只有具备 prototype 的普通函数,才能作为构造函数或被挂载到原型上,形成可继承、可重写的原型链行为。箭头函数只适合用作无状态、无 this 依赖的回调或工具逻辑,比如数组遍历、Promise 链处理、事件监听器中的闭包封装等。


















