在 TypeScript 中扩展 HTMLElement
Extending HTMLElement in TypeScript
我正在尝试使用 TypeScript 扩展 HTMLElement。下面是我的代码,它警告未定义,因为 "this" returns 一个 window 对象,这似乎是正确的。如何以类似的方式访问调用方 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,正如您在操场上看到的那样:
http://past.is/wxBJm
由于 lambda 不在 class 中,它绑定到全局的 "this",这里是 window 对象。
通过使用函数语法,您可以保持 javascript 行为,因此 this 绑定到 属性 访问(点表示法)左侧的对象。
但我认为您不应该直接使用打字稿中的原型向 class 添加方法。
我正在尝试使用 TypeScript 扩展 HTMLElement。下面是我的代码,它警告未定义,因为 "this" returns 一个 window 对象,这似乎是正确的。如何以类似的方式访问调用方 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,正如您在操场上看到的那样: http://past.is/wxBJm
由于 lambda 不在 class 中,它绑定到全局的 "this",这里是 window 对象。
通过使用函数语法,您可以保持 javascript 行为,因此 this 绑定到 属性 访问(点表示法)左侧的对象。
但我认为您不应该直接使用打字稿中的原型向 class 添加方法。