首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在TypeScript中实例化新HTMLElement

在TypeScript中实例化新HTMLElement
EN

Stack Overflow用户
提问于 2014-10-07 00:05:18
回答 3查看 60K关注 0票数 69

我正在尝试在TypeScript中实例化新的HTMLDivElement

代码语言:javascript
复制
var elem = new HTMLDivElement();

但是浏览器抛出

代码语言:javascript
复制
Uncaught TypeError: Illegal constructor.

解决方法似乎是使用

代码语言:javascript
复制
var elem = document.createElement('div');

但由于各种原因,我发现这并不是最优的。

lib.d.ts中存在用于in的new关键字时,为什么不能直接实例化DOM元素

代码语言:javascript
复制
declare var HTMLDivElement: {
    prototype: HTMLDivElement;
    new (): HTMLDivElement;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-07 01:28:04

注意,你在这里得到的错误是“非法构造函数”。这与错误"object is not a function“是不同的,例如,如果你要编写new {}(),你会得到这样的错误。

因此,从技术上讲,HTMLDivElement确实有一个构造函数。只是这个特殊的构造函数抛出了一个异常,而不是创建一个对象。

通常,lib.d.ts只会排除这些无用的签名,但TypeScript要求instanceof操作符的右侧有一个构造函数。换句话说,编写foo instanceof HTMLElement是合法的,但编写foo instanceof []是不合法的,区别是由HTMLElement具有构造函数这一事实决定的。

这里基本上有三个选择:

  1. 从DOM元素中删除构造签名,并删除对instanceof右操作数的限制。这是不可取的,因为您真的希望捕获以下错误:有人意外地编写了x instanceof foo之类的代码,而不是x instanceof Foo (其中foo是DOM元素的构造签名的实例,但保留instanceof检查)。这很糟糕,因为foo instanceof HTMLElement是一个非常合理的编写方法。

H119当前的情况,即构造函数存在,但您必须知道不能调用它们。

您不能使用普通构造函数来构造DOM元素,因为您应该通过document.createElement。这基本上是由于与浏览器如何实现这些对象相关的技术原因。

票数 89
EN

Stack Overflow用户

发布于 2017-08-13 18:15:23

您在c#语法中使用了错误的typescript语法。

只需替换

代码语言:javascript
复制
var elem = new HTMLDivElement();

具有以下任一项

代码语言:javascript
复制
var elem = document.createElement('div');

代码语言:javascript
复制
var elem = <HTMLDivElement>(document.createElement('div'));

代码语言:javascript
复制
let elem = document.createElement('div') as HTMLDivElement

(如果需要使用HTMLDivElement属性)

票数 26
EN

Stack Overflow用户

发布于 2019-05-26 14:03:35

如果您扩展HTMLElementHTMLDivElement之类的任何子类

您还需要注册自定义元素

代码语言:javascript
复制
class SampleDiv extends HTMLDivElement{
    constructor(){
       super();
    }
}
customElements.define('sample-div', SampleDiv, { extends: 'div' });

点击此处查看更多信息:https://javascript.info/custom-elements

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26220243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档