如何访问类属性?

时间:2012-05-30 16:50:36

标签: javascript jquery

我有这段代码:

function myClass() {

    this.tabs = new Array();

    myClass.prototype.focus_tab = function animateTab(nr){
        for(i=0;i<this.tabs.length;i++){
            $('#' + i + '-image').stop().animate(
                { left: '100px' },
                100 , function(){
                    this.tabs[i].step = 1;
                }
            );
        }
}

但动画结束时的功能无法识别“this.tabs”。 怎么做得好?

2 个答案:

答案 0 :(得分:3)

它的范围不同,请尝试:

function myClass() {
  this.tabs = new Array();

  myClass.prototype.focus_tab = function animateTab(nr){
     for(i=0;i<this.tabs.length;i++){
         var mytab = this.tabs[i];
         $('#' + i + '-image').stop().animate({ left: '100px' }, 100 , function(){
             mytab.step = 1;
         }
      );
  }
}

还有一些其他问题,但对这个问题的评论已经解决了其中一些问题!

答案 1 :(得分:0)

这是classic scoping issue的另一个例子。您只有一个i变量,为您的所有回调共享。您需要为每个回调创建一个本地i。改变你的回调:

function(){
    this.tabs[i].step = 1;
}

要:

(function(i){
    return function(){
        this.tabs[i].step = 1;
    }
})(i)