ES6:绕过类构造函数调用的 new 关键字
在 ES6 中,类不仅充当对象的蓝图,还体现了它们的构造函数。 constructor()函数作为类体,在类被调用时触发其执行。但是,尝试在没有必需的 new 关键字的情况下调用类通常会导致“无法将类作为函数调用”错误消息。
了解构造函数命令
类本质上与 new 运算符相关联,这确保在实例化时创建类的新实例。调用不带 new 的类违反了此设计原则,导致上述错误。
替代解决方案
如果所需的行为是允许带或不带 new 的类调用,存在几种替代方案:
1。使用常规函数代替类
常规函数可以模仿类似类的行为,而无需新的要求。它仍然可以使用它强制执行类似实例的行为,但它缺乏类的封装和继承功能。
<code class="js">function Foo(x) { this.x = x; this.hello = function() { return this.x; }; }</code>
2.强制使用 new 关键字
如果预期目的是始终使用 new 调用类,则无需任何解决方法。只需遵循推荐的构造函数调用模式:
<code class="js">(new Foo("world")).hello(); // "hello world"</code>
3.用常规函数包装类
这种方法提供了使用或不使用 new 来调用类的灵活性,同时保留了使用类的好处。包装函数始终使用 new 调用类构造函数。
<code class="js">class Foo { constructor(x) { this.x = x; } hello() { return `hello ${this.x}`; } } var _old = Foo; Foo = function(...args) { return new _old(...args) }; Foo("world").hello(); // "hello world" (new Foo("world")).hello(); // Also works</code>
以上是如何在没有 new 关键字的情况下调用 ES6 类?的详细内容。更多信息请关注PHP中文网其他相关文章!