javascript - 不是所有的 JavaScript 函数都是构造函数吗?

标签 javascript eval

我以一种奇怪的方式使用 eval 函数,作为构造函数。

try {
  var y = new eval()
} catch(error) {
    console.log("caught a " + error.name + ": " + error.message);
}

它抛出错误,

caught a TypeError: function eval() { [native code] } is not a constructor

如错误消息所示,eval 是一个函数而不是构造函数。

问题是,不是所有的 javascript 函数都充当构造函数吗?

最佳答案

并非所有函数都是构造函数。

构造函数是 function values with a [[Construct]] internal property ,并非所有功能都有。这在 6.1.7.2 Object Internal Methods and Internal Slots 中有明确说明。语言规范:

A function object is not necessarily a constructor and such non-constructor function objects do not have a [[Construct]] internal method.

使用 newReflect.construct 调用非构造函数作为构造函数会抛出 TypeError

关于javascript - 不是所有的 JavaScript 函数都是构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092403/

相关文章:

javascript - 输入不可删除

javascript - 如何检测 Angular 中是否填充了文件输入?

javascript - 使用 file_get_contents() 和 implode() 将数组传递给 javascript 不起作用

perl - 为什么 Perl 的 eval 不能从 Test::Cmd::Common->unlink 中捕获问题?

javascript - 在更改事件处理程序中(重新)渲染 Backbone View 不起作用

php - Backbone.js 如何与 PHP 一起使用

C#:在同一条语句中动态实例化不同的类?

Perl:cmpthese 文本与传递参数的匿名子问题

perl - 在 Carp::longmess() 输出中访问引用的参数

eval - `eval` 和 `eval-syntax` 之间的区别