为何Prisma中MigrateDev类静态new方法返回自身实例不会栈溢出?
为什么Prisma中MigrateDev的静态new方法不会引发无限循环?
核心原因很简单:这个静态方法的new只是个自定义方法名,和JavaScript里创建实例的new关键字完全是两回事。
具体拆解一下:
- 当你调用
MigrateDev.new()时,执行的是类的静态方法逻辑,这个方法内部的new MigrateDev()是用new关键字调用类的构造函数,而不是再次调用静态方法new()。 - 只有当静态方法内部写了
return MigrateDev.new()这种代码时,才会触发递归调用导致栈溢出,但这里并没有这么做,只是直接创建实例返回,所以完全不会有无限循环的问题。
举个极简的例子就能看明白:
class Demo { static new() { // 这里的new是关键字,调用构造函数,和上面的静态方法new无关 return new Demo(); } } // 正常创建实例,毫无问题 const demoInstance = Demo.new();
内容的提问来源于stack exchange,提问作者ack_inc
相关产品推荐
相关产品推荐

