首页 > 开发 > JS > 正文

js 一个面向对象报错的问题

2017-09-05 12:38:17  来源:网友分享
 class Pick{        constructor(id, i){         this.aa=id;         this.kk=i;    }             start(id){        dlog(''+this.aa);        this.run(id);    }            run(id){                if(this.kk > 10) return;        dlog('标记1:'+this.aa+"  "+this.kk+id);//标记1        thread(function (){            dlog('标记2:'+this.aa+"  "+this.kk+id);//标记2            this.kk++;            this.run(id);        }, 1000*5);            }     }function dlog(msg){     console.log(msg);}function thread(callBack, time){         setTimeout(function(){        callBack();      },  time);        }

使用

let picker_id = 'test'let pick = new Pick(picker_id, 0);pick.start(picker_id);

报错

Uncaught TypeError: Cannot read property 'aa' of undefined

报错的是“标记2”这行代码。一样的代码,”标记1“倒没有报错。线程里面就报错,请问应该如何修改呢?

解决方案

匿名函数this指向丢失问题导致的吧。你在run中调用thread传入的函数是匿名函数this指向有问题,后面加个bind(this)或者用箭头函数吧