语境
我注意到有些函数只能用new
前缀调用。在没有它的情况下调用时,会抛出错误非法调用。以下是控制台在Image
以不同方式调用时如何反应的两个示例。
-> new Image();
<- <img>
-> Image();
<- TypeError: DOM object constructor cannot be called as a function.
更有趣的是,在仔细观察下,这些类型的函数看起来像函数,但它们不是。举个Image
例子,该typeof
命令表明它Image
是一个函数,但它的构造函数却Image
暗示它是一个对象。
这与下面的大多数构造函数非常不同。
function Foo(){
this.identity = 'Bar';
}
该函数Foo
可以通过两种方式调用,new Foo()
并且Foo()
. 这与功能非常不同Image
。
问题
这个带有函数的动作与Image
大多数构造函数有很大的不同。这怎么可能?这就是为什么new
前缀必须与 一起使用的原因Image
吗?更重要的是,这种功能可以重新创建吗?