在TypeScript中扩展HtmleElement

在TypeScript中扩展HtmleElement,typescript,undefined,extending,Typescript,Undefined,Extending,我正在尝试使用TypeScript扩展HtmleElement。下面是我的代码,它警告未定义,因为它返回一个窗口对象,这似乎是正确的。如何以类似的方式访问调用HTMLElement interface HTMLElement { setData(dataObject: any): void; } HTMLElement.prototype.setData = (dataObject: any) => { alert(this.id); //Undefined

我正在尝试使用TypeScript扩展HtmleElement。下面是我的代码,它警告未定义,因为它返回一个窗口对象,这似乎是正确的。如何以类似的方式访问调用HTMLElement

interface HTMLElement {
    setData(dataObject: any): void;
}

HTMLElement.prototype.setData = (dataObject: any) => {
        alert(this.id); //Undefined
        alert(this); //Window Object
}

var data = { "InHouse": "5", "BookedMtd": "105" }
document.getElementById("infobartemplate").setData(data); 
更新:通过将代码更改为:

HTMLElement.prototype.setData = function (dataObject: any): void {
        alert(this.id);
} 

不知道有什么区别。我认为是一样的。

这是因为您使用的lambda语法通过使用名为_this的变量将this值保留为外部this,正如您在游乐场中看到的:

因为lambda不在类中,所以它被绑定到全局的this,这里是window对象

通过使用函数语法,您可以保持javascript行为,因此这将绑定到属性访问点符号左侧的对象


但是我认为不应该直接使用typescript中的原型向类添加方法。

是的,使用函数。关于扩展html元素。这过去是个坏主意。现在它是一致的并且被接受了。