首页  >  文章  >  web前端  >  如何在没有 new 关键字的情况下调用 ES6 类?

如何在没有 new 关键字的情况下调用 ES6 类?

Susan Sarandon
Susan Sarandon原创
2024-10-26 03:18:02510浏览

 How to Invoke ES6 Classes Without the `new` Keyword?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn