gpt4 book ai didi

JavaScript 类继承

转载 作者:行者123 更新时间:2023-12-02 23:55:58 25 4
gpt4 key购买 nike

谁能告诉我为什么我的“showDiv_boo”在类的方法中未定义?我也无法访问我的类的方法。

这是我的“Blink”类及其属性和方法:

function Blink(div) {
this.div = div
}
Blink.prototype.counter = 0
Blink.prototype.showDiv_boo = true
Blink.prototype.showDiv = function() {
this.div.style.visibility = 'visible'
}
Blink.prototype.hideDiv = function() {
this.div.style.visibility = 'hidden'
}
Blink.prototype.startEngine = function() {
if (this.showDiv_boo) {
this.showDiv()
} else if (!this.showDiv_boo) {
this.hideDiv()
}
this.showDiv_boo = !this.showDiv_boo
this.counter++
}
Blink.prototype.startEffect = function() {
this.idEffect = setInterval(this.startEngine, 1000 / 45)
}

所以,如果我创建:

_blink = new Blink(myDiv);
_blink.startEffect();

您可以测试...变量“showDiv_boo”在方法内未定义。

甚至,如果我将方法内的 showDiv_boo 设置为 true,它也不会调用我的类的方法 showDiv 或 hideDiv。

有人吗?

谢谢:)

最佳答案

原因是 startEngine 是从 setInterval 调用的。调用此回调的方式会导致 startEnginethis 值与 startEffect 不同。您需要保存 this 以便在回调中维护它。例如。

Blink.prototype.startEffect = function () { 
var self = this;
self.idEffect = setInterval(function () { self.startEngine(); }, 1000 / 45);
};

关于JavaScript 类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com