gpt4 book ai didi

javascript - new fnname 和 new fnname() 有什么区别?

转载 作者:行者123 更新时间:2023-11-30 07:09:26 25 4
gpt4 key购买 nike

我在 Javascript 中创建了一个名为 Class1 的类。

function Class1(){}

现在,我可以使用 new 运算符创建 Class1 的对象。例如:

var obj1 = new Class1();

而且我最近还发现您可以使用:

var obj1 = new Class1;

它们是一样的还是在使用上有什么不同?

最佳答案

ECMAScript 5 中所述,即 Javascript 规范:

11.2.2 The new Operator

The production new NewExpression is evaluated as follows:

  1. Let ref be the result of evaluating NewExpression.
  2. Let constructor be GetValue(ref).
  3. If Type(constructor) is not Object, throw a TypeError exception.
  4. If constructor does not implement the [[Construct]] internal method, throw a TypeError exception.
  5. Return the result of calling the [[Construct]] internal method on constructor, providing no arguments (that is, an empty list of arguments).

The production new MemberExpression Arguments is evaluated as follows:

  1. Let ref be the result of evaluating MemberExpression.
  2. Let constructor be GetValue(ref).
  3. Let argList be the result of evaluating Arguments, producing an internal list of argument values (11.2.4).
  4. If Type(constructor) is not Object, throw a TypeError exception.
  5. If constructor does not implement the [[Construct]] internal method, throw a TypeError exception.
  6. Return the result of calling the [[Construct]] internal method on constructor, providing the list argList as the argument values.

因此,new Foo 将调用带有空参数列表的 Foo,就像 new Foo() 一样。

这两种语法没有区别。

关于javascript - new fnname 和 new fnname() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com