2012-10-04 132 views
3

之前我什么也没有,我很高兴加入这个伟大的社区。关键是,我有一个叫做字一个JavaScript类是这样的:在JavaScript类中调用父方法

var Character = function() 

{ 

    // ..Some previous Properties/Methods (included one called "StareDown()").. 

    // And this method: 

    this.GrabDown = function() 

    { 
     Context.clearRect(0, 0, CanvasWidth, CanvasHeight); 
     //Context.fillRect(0, 0, CanvasWidth, CanvasHeight); 
     Context.drawImage(this.GrabbingDown, CharacterX, CharacterY, SpriteWidth, SpriteHeight); 

     window.setTimeout 
     (
      function() 

      { 
       // Here is where I want to call the parent class method "StareDown()", but I don't know how.     
      }, 
      250 
     ); 
    } 
} 

所以这是我的大问题,我怎样才能通过该子匿名函数访问父类的方法?我一直试图弄清楚整个晚上,但我找不到一些有用的信息,谢谢!

回答

1

您需要存储在一个变量的父this对象(假设你已经定义的功能this.StareDown = function() {...}

var Character = function() 

{ 

    // ..Some previous Properties/Methods (included one called "StareDown()").. 
    this.StareDown = function() {...} 

    var curCharacter = this; 

    this.GrabDown = function() 

    { 
     Context.clearRect(0, 0, CanvasWidth, CanvasHeight); 
     //Context.fillRect(0, 0, CanvasWidth, CanvasHeight); 
     Context.drawImage(this.GrabbingDown, CharacterX, CharacterY, SpriteWidth, SpriteHeight); 

     window.setTimeout 
     (
      function() 

      { 
       // Here is where I want to call the parent class method "StareDown()", but I don't know how.  
       curCharacter.StareDown(...);   
      }, 
      250 
     ); 
    } 
} 
+0

明亮,这是最简单的方法,只是将我的这个分配给一个名为Parent的var,然后在您向我展示时通过它调用该方法,非常感谢。 – Neo

0

你可以只使用window.setTimeout(this.StareDown,250);但裸记住,该方法将在被称为全局上下文(即这将指向window,而不是调用该GrabDown方法Character实例

为了使用功能作为一个对象的方法:

window.setTimeout((function(that) 
{ 
    return function() 
    { 
     return that.StareDown(); 
    } 
})(this),250); 

应该工作。这是相当冗长,也许看MDN文档的callapply尤其是bind可能证明是有用的

0

这是我会做:

var Character = function() { 
    this.GrabDown = function() { 
     setTimeout(function() { 
      // call this.StareDown in here 
     }.bind(this), 250); 
    }; 
}; 

这工作,因为我们正在结合的this指向匿名FunctionExpression传递给setTimeout。因此它可以像班级的普通方法一样使用。