声明var HTMLDivElement {new(),prototype}是什么意思

时间:2013-09-05 10:47:17

标签: typescript new-operator

lib.d.ts持有声明:

interface HTMLDivElement extends HTMLElement, ... {}

declare var HTMLDivElement: {
    prototype: HTMLDivElement;   // additional q: what does this mean?
    new(): HTMLDivElement;       // q: what does this mean?
}

我猜原型允许在div中添加更多方法(虽然不会过分推荐增强内置js类型),但对new()的含义猜测较少。

这个声明是什么意思,为什么有必要或有帮助?

1 个答案:

答案 0 :(得分:2)

以下是这些行的概述......

new(): HTMLDivElement;

这意味着在创建实例时,该实例的类型将为HTMLDivElement。例如......

var elem = new HTMLDivElement(); // elem is of type HTMLDivElement

这真正做的是告诉编译器你可以创建这个对象的实例(这是必需的,因为它没有被声明为一个类)。如果在编译创建实例的代码时,如果声明中没有这一行,则会出现“无效的新表达式”错误。

注意:在这种特定情况下,您将收到运行时错误,因为据我所知,HTMLDivElement不应该是“新的”。如果从lib.d.ts中删除new(): HTMLDivELement;,编译器实际上会正确警告您不能这样做。

prototype: HTMLDivElement;

如果没有这行代码,您将能够在对象的实例上使用方法和属性,但是您将无法覆盖原型:

HTMLDivElement.prototype.getAttribute = function (name?: string) {
    return 'Go Away';
}