0

我正在为 HTML5 游戏使用easeljs。

我正在从类中的方法中调用 onClick,但事件对象正在覆盖我的“this”对象,因此我无法再访问其他类方法或 var。例如我有类似的东西(显然这不是实际的代码,只是一个简单的说明):

function Book(){

  this.text = "this is the text";

  this.makeText = function(){
            //Define some shapes
            var character = new Container();
            character.addChild(some shapes);
            character.onClick = this.detectClick;
  }

  this.detectClick = function(){
           alert(this.text);
  }
}

所以,如果我运行它,我会收到一个未定义的警报,因为在我的 detectClick 方法中,这现在是我的事件对象。

那么如何从这个方法中调用原始文本呢?

非常感谢

4

4 回答 4

3

你需要我们闭包来传递对象引用

 var self = this;
 character.onClick = function(){ self.detectClick() };
于 2012-11-30T10:03:31.963 回答
1

范围 'this' 是您代码中的问题。更改您的代码,如下面的代码

 function Book(){

  this.text = "this is the text";
  var that=this;
  this.makeText = function(){
        //Define some shapes
        var character = new Container();
        character.addChild(some shapes);
        character.onClick = that.detectClick;
 }

 this.detectClick = function(){
       alert(this.text);
 }
}
于 2013-07-26T12:30:14.897 回答
0

或者使用简单的代理方法。

function proxy(method, scope) {
    return function() {
        return method.apply(scope, params);
    }
}
character.onclick = proxy(detectClick, this);
于 2012-12-01T20:31:18.240 回答
0

好的,你真正需要做的是

function Book(){

  this.text = "this is the text";

  this.makeText = function(){
            //Define some shapes
            var character = new Container();
            character.addChild(some shapes);
            character.onClick = this.detectClick.bind(this);
  }

  this.detectClick = function(){
           alert(this.text);
  }
}
于 2012-12-25T20:30:04.420 回答