在TypeScript中扩展HtmleElement
我正在尝试使用TypeScript扩展HtmleElement。下面是我的代码,它警告未定义,因为它返回一个窗口对象,这似乎是正确的。如何以类似的方式访问调用HTMLElement在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
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元素。这过去是个坏主意。现在它是一致的并且被接受了。