具体问题就是setTimeout里面执行方法本身的时候,直接写方法名会报错,也许是我搜索的方式不对,没有搜到相关答案。
this.timer = setTimeout(self.change, this.s); 这样写会报错
写这个是为了实现字体不停变色。
function ChangeColor(id,arr,s) {
this.id = id;
this.arr = arr;
this.s = s;
this.i = 0;
this.timer = null;
}
ChangeColor.prototype = {
change : function () {
let self = this;
if (this.arr[this.i]) {
$(this.id).css('color', this.arr[this.i]);
}
this.i === 0 ? this.i++ : this.i = 0;
// this.timer = setTimeout(self.change, this.s);
this.timer = setTimeout(function () {
// console.log(self);
self.change();
}, this.s);
}
};
let txt = new ChangeColor('.txt',['#fff','#000'],200);
txt.change();
谢谢
初始化运行正常,定时器触发后,change函数作为setTimeout的回调函数,此时this指向了window,执行
this.arr[this.i]
报错.最后,函数调用是
txt.change()
,不是txt.changeColor()