我有一个带有此代码的课程
class Widget {
onstructor(v) {
this.value = v
}
createFilledRange() {
this.btn_plus = app.CreateButton("[fa-plus]", 0.1, 0.05, "FontAwesome")
this.btn_plus.SetOnTouch(() => {
app.ShowPopup(this.value)
})
}
}
...我像这样实例化该类
let termo = new Widget(20)
let shower = new Widget(40)
termo.createFilledRange())
shower.createFilledRange()
如果我只实例化一个项目,我就会遇到问题,但是当我使用两个对象执行此操作时,单击按钮的值总是给我第二个对象值。也就是说,无论我按哪个按钮,结果始终是 40。
另一方面,如果我这样设置事件,程序就可以完美运行
let termo = new Widget(20)
let shower = new Widget(40)
termo.createFilledRange()
termo.btn_plus.SetOnTouch(() => {
app.ShowPopup(termo.value)
})
shower.createFilledRange()
shower.btn_plus.SetOnTouch(() => {
app.ShowPopup(shower.value)
})
如何直接在班级上设置事件?
谢谢大家
this
并不引用 Widget
中 SetOnTouch
的当前实例。没有足够的信息,不清楚this
实际上指的是什么。
实例可能是全局范围的,返回最后一个实例。
要引用当前实例,您可以使用
function() {...}.bind(this)
或将实例存储在另一个变量中并使用该变量。
喜欢:
createFilledRange() {
this.btn_plus = app.CreateButton("[fa-plus]", 0.1, 0.05, "FontAwesome")
this.btn_plus.SetOnTouch(() => {
app.ShowPopup(this.value)
}.bind(this))
}
或
createFilledRange() {
this.btn_plus = app.CreateButton("[fa-plus]", 0.1, 0.05, "FontAwesome")
const that = this;
this.btn_plus.SetOnTouch(() => {
app.ShowPopup(that.value)
})
}