ES6:绕过类构造函数调用的“new”关键字
在 ES6 中,类构造函数充当类本身的主体。但是,在调用类来创建实例时必须使用“new”关键字。此要求提出了一个问题:在调用类构造函数时是否可以绕过“new”关键字。
要了解限制背后的根本原因,深入研究类构造函数的本质至关重要。与常规函数不同,类的构造函数是类定义的固有部分,并且始终在实例化类时执行。此行为源于该类本质上是一个构造函数。
因此,尝试调用不带“new”关键字的类会导致以下错误:
TypeError: Class constructors cannot be invoked without 'new'
错误消息准确反映了强制要求。
要实现在不使用“new”关键字的情况下调用类的所需功能,可以考虑多种方法:
选项 1:使用常规函数
可以使用常规函数来代替类来实现类似的行为:
function Foo(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; }
选项 2:强制使用一致的“新”关键字
在调用类时强制一致使用“new”关键字仍然是一个有效的选项。
选项 3:包装类
常规通过始终使用“new”关键字调用类,可以创建包装函数来处理“new”和非“new”调用:
class Foo { constructor(x) { this.x = x; } } var _old = Foo; Foo = function(...args) { return new _old(...args) };
通过了解类构造函数的机制并探索替代方法,开发人员可以有效地了解 ES6 类调用的细微差别。
以上是以下是一些遵循您的指南的标题选项: 选项 1:强调问题 * ES6 类:可以在没有“new”的情况下调用构造函数吗? 选项 2:专注于解决方案 * 沃卡鲁的详细内容。更多信息请关注PHP中文网其他相关文章!