首页 > web前端 > js教程 > 正文

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

Susan Sarandon
发布: 2024-10-26 03:18:02
原创
461 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!