在Javascript中,函数声明是创建构造函数的唯一方法
In Javascript, is function declaration the only way to create a constructor?
在JavaScript中,函数声明是创建可用于实例化新对象的构造函数的唯一方法。如果是,为什么?这个问题源于以下代码。
var customevent = {
prop1 : "div",
prop2 : "div2"
}
var myevent_obj = new customevent();
浏览器JS控制台显示
SyntaxError: customevent is not a constructor.
根据定义,构造函数是实现内部[[call]]
和[[Construct]]
方法的对象。除了少数内置函数外,所有本机函数都是构造函数。大多数宿主函数不是构造函数,但也有一些是构造函数。
EMCAScript 2015还定义了外来函数对象,这些对象可能是内置的,但不必是构造函数。
有两种方法可以创建可以作为构造函数的本机函数:
- 函数声明:
function MyConstructor(){...}
- 函数表达式(通常通过赋值):
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);
相关文章:
- 对使用函数构造函数创建的函数的内部引用
- 获取使用函数构造函数创建的函数的名称
- 为什么可以't JavaScript构造函数创建字符串或数字
- 为什么用构造函数创建对象会执行对象's方法
- 使用构造函数创建对象和返回对象有区别吗
- 通过父构造函数创建主干继承视图
- 使用构造函数创建的数字没有其值作为属性,请取消String与构造函数的链接
- Javascript构造函数创建对象与常规对象
- 为什么更改函数的 .prototype 会影响已使用该构造函数创建的对象的“实例”
- 在 JavaScript 中从构造函数创建编号对象
- 为什么使用函数构造函数创建的 Javascript 函数无法访问在其外部定义的其他函数
- 如何访问使用构造函数创建的对象的属性
- 从构造函数创建一个匿名函数对象,并将其存储在另一个对象中
- 为什么对象构造函数中的函数会改变以前由该构造函数创建的所有对象?
- 通过JS中的对象构造函数创建对象,该构造函数位于单独的JS文件中
- 使用构造函数创建的JavaScript对象的getter和setter
- 通过对象匹配Javascript regexp中的空白,通过regexp构造函数创建
- 如何使用javascript构造函数创建HTML元素
- 访问由构造函数创建的对象中的属性
- 从构造函数创建的对象返回带有构造函数名称的对象,但没有冒号