【发布时间】:2022-11-19 02:30:43
【问题描述】:
我对 javascript 很感兴趣,到目前为止我很喜欢它。我正在使用画布并在课堂上创建了一个基本的“按钮”小部件。我尝试使用函数引用作为参数来创建一种“事件”操作,但使用下面的模式,事实证明我可以触发“OnClick”,但范围很奇怪:“this”不是 cParentClass如我所料,看起来“this”就是 cButton。
有一个更好的方法吗?我有更多的运气 cParentClass 发送本身作为通用类目标,然后 cButton 调用 onclick 函数并将其自身作为参数发送(如果有多个按钮)。但这似乎还有很长的路要走?
有人可以帮助我理解为什么回调后“this”搞砸了吗?我想我会从你的回答中学到一些重要的东西。
谢谢!
class cButton{
constructor() {
this.handler_Click = null;
}
RegisterHandler_OnClick(handler) {
this.handler_OnClick = handler;
}
HandleClick() {
//console.log("cButton.HandleClick");
if (this.handler_OnClick != null) {
this.handler_OnClick();
}
}
}
class cParentClass()
{
constructor() {
this.button1 = new cButton();
this.button1 .RegisterHandler_OnClick(this.OnClick);
}
OnClick()
{
console.log("clicked" + this.ParentClassMethod); // <-- doesnt work because "this" doesnt point to cParentClass, it points to cButton
}
ParentClassMethod()
{
}
}
【问题讨论】:
-
this的值取决于函数的调用方式,而不是定义的位置(除非它是箭头函数)。 -
你能稍微扩展一下吗?调用一个函数有哪些不同的“方式”?
标签: javascript