You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript中类方法无法作为构造函数使用?

为什么new f.baz()有效而new f.bar()会报错

先看你的代码示例:

class Foo {
  bar() {}
}
Foo.prototype.baz = function() {};

const f = new Foo();

new f.baz(); // 正常执行
new f.bar(); // 抛出TypeError

核心差异:类方法的不可构造特性

  • 类体中定义的bar是类原型方法,这类方法被ECMAScript规范设定为不可构造(non-constructable)。它们没有[[Construct]]内部方法槽——这个内部槽是new操作符调用函数的必要条件,没有它的话,用new调用就会直接报错。
  • 直接赋值给Foo.prototype.baz的是普通函数,这类函数默认拥有[[Construct]]内部槽,支持new操作符调用,能正常生成新实例。

对应ECMAScript规范说明

根据ECMAScript语言规范:

类定义中的方法(包括原型方法、静态方法)会被初始化为不可构造的函数对象。这类函数的[[Construct]]内部方法会抛出TypeError,而普通字面量函数默认具备合法的[[Construct]]实现,允许通过new调用。

简单说,类里定义的方法本质上是被特殊处理过的函数,禁止用作构造器;而直接挂到原型上的普通函数没有这个限制。

内容的提问来源于stack exchange,提问作者pixatlazaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:55:20