Javascript JS函数,只能通过新关键字调用

Javascript JS函数,只能通过新关键字调用,javascript,object,Javascript,Object,我们可以在javascript中创建一个只能通过new关键字调用的函数吗?有人问我如何在javascript中引入这样的限制以及它的用途 如果有人能回答此限制的使用问题,我们将不胜感激。实际上是特殊功能 类需要使用new运算符来创建新实例,因此在不使用new运算符的情况下调用类会导致错误,因为类构造函数需要创建新实例。实际上是特殊函数 类需要使用新运算符来创建新实例,因此在没有新运算符的情况下调用类会导致错误,类构造函数需要创建新实例。使用new.target属性可以检测是否使用new运算符调用

我们可以在javascript中创建一个只能通过new关键字调用的函数吗?有人问我如何在javascript中引入这样的限制以及它的用途

如果有人能回答此限制的使用问题,我们将不胜感激。

实际上是
特殊功能

类需要使用new运算符来创建新实例,因此在不使用new运算符的情况下调用类会导致错误,因为类构造函数需要创建新实例。

实际上是
特殊函数


类需要使用新运算符来创建新实例,因此在没有新运算符的情况下调用类会导致错误,类构造函数需要创建新实例。

使用
new.target
属性可以检测是否使用
new
运算符调用了函数或构造函数:

function Foo() {
  if (!new.target) throw 'Foo() must be called with new';
}

try {
  Foo();
} catch(e) {
  console.log(e);
  // expected output: "Foo() must be called with new"
}
在接下来的情况下,这可能会有所帮助:

  • 调用函数
    Foo()
    时,隐式地创建新的对象实例,但使用
    new
    关键字-这是显式的。因此,代码更易于阅读/使用/维护/等等

  • 当您需要在创建新对象实例期间执行某些特定操作时(仅在创建期间执行一次)

  • 当您需要执行所有
    new
    关键字在引擎盖下执行的操作,以及哪些简单函数调用不会执行的操作时


  • new.target
    属性用于检测是否使用
    new
    运算符调用了函数或构造函数:

    function Foo() {
      if (!new.target) throw 'Foo() must be called with new';
    }
    
    try {
      Foo();
    } catch(e) {
      console.log(e);
      // expected output: "Foo() must be called with new"
    }
    
    在接下来的情况下,这可能会有所帮助:

  • 调用函数
    Foo()
    时,隐式地创建新的对象实例,但使用
    new
    关键字-这是显式的。因此,代码更易于阅读/使用/维护/等等

  • 当您需要在创建新对象实例期间执行某些特定操作时(仅在创建期间执行一次)

  • 当您需要执行所有
    new
    关键字在引擎盖下执行的操作,以及哪些简单函数调用不会执行的操作时


  • 一个小小的研究会有很大的帮助,所以请使用堆栈溢出来寻求帮助,但老实说,这里感觉你有点懒。用谷歌搜索东西真的没那么难。一个小小的研究会有很大的帮助,所以请使用堆栈溢出来寻求帮助,但老实说,你在这里感觉有点懒。用谷歌搜索东西其实并不难。如果能更多地解释什么是
    新的.target
    以及它是如何工作的,这个答案会更好…@MikeMcCaughan Done!)谢谢你的回答,但是如果这个限制有什么用呢function@jiten完成!))如果能更多地解释什么是
    新的.target
    以及它是如何工作的,这个答案会更好…@MikeMcCaughan Done!)谢谢你的回答,但是如果这个限制有什么用呢function@jiten完成!))