在Javascript中,函数声明是创建构造函数的唯一方法

In Javascript, is function declaration the only way to create a constructor?

本文关键字:构造函数 创建 唯一 方法 声明 Javascript 函数      更新时间:2023-09-26

在JavaScript中,函数声明是创建可用于实例化新对象的构造函数的唯一方法。如果是,为什么?这个问题源于以下代码。

var customevent = {
        prop1 : "div",
        prop2 : "div2"
    }
    var myevent_obj = new customevent();

浏览器JS控制台显示

SyntaxError: customevent is not a constructor.

根据定义,构造函数是实现内部[[call]][[Construct]]方法的对象。除了少数内置函数外,所有本机函数都是构造函数。大多数宿主函数不是构造函数,但也有一些是构造函数。

EMCAScript 2015还定义了外来函数对象,这些对象可能是内置的,但不必是构造函数。

有两种方法可以创建可以作为构造函数的本机函数:

  1. 函数声明:function MyConstructor(){...}
  2. 函数表达式(通常通过赋值):var MyConstructor = function(){...};

就是这样。

在OP中:

var customevent = {
        prop1 : "div",
        prop2 : "div2"
    }

customvevent是一个Object,而不是Function。普通对象不实现[[Call]][[Construct]]内部方法,因此它们不能是构造函数。它们可以用作原型:

function customConstructor(){}
customConstructor.prototoype = customevent;

var newCustomEvent = Object.create(customevent);