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

标签 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?
}

我猜原型(prototype)允许向 div 添加更多方法(虽然无论如何都不会过度推荐增强内置 js 类型),但很少猜测 new() 的含义。

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

最佳答案

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

new(): HTMLDivElement;

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

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

这实际上是告诉编译器您可以创建该对象的实例(这是必需的,因为它没有声明为类)。如果声明中没有这一行,当您编译创建实例的代码时,您将收到“无效的新表达式”错误。

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

prototype: HTMLDivElement;

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

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

关于typescript - 声明 var HTMLDivElement { new(), prototype } 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634281/

相关文章:

c# - 如何在使用 LINQ C# 创建新对象时访问内部属性?

typescript - 将验证器中的字段与 angular2 进行比较

typescript :接口(interface)中的常量

C++ 内存泄漏 new 运算符

c++ - new 后面一定要跟着 delete 吗?

c++ - 将 malloc 更改为新的运算符

javascript新的自调用函数

javascript - typescript - 将字符串转换为数字

javascript - 什么被认为是测试返回 http observables 的方法的正确方法?

typescript - 在 TypeScript 中创建一个全局变量