2012-11-30 2 views
0

Я использую easeljs для игры HTML5.Возвращаемый объект объекта, перезаписывающий родительский объект - javascript, easeljs

Я вызываю onClick из метода в классе, но объект события перезаписывает мой «этот» объект, поэтому я больше не могу обращаться к другим методам класса или vars. Например, у меня есть что-то вроде (очевидно, это не фактический код, просто быстрый рисунок):

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, это сейчас мой объект события.

Так как я могу называть исходный текст из этого метода?

Большое спасибо

ответ

3

Вы должны нас закрытия, чтобы передать ссылку на объект

var self = this; 
character.onClick = function(){ self.detectClick() }; 
+0

Отлично, спасибо. –

0

Или использовать простой метод прокси.

function proxy(method, scope) { 
    return function() { 
     return method.apply(scope, params); 
    } 
} 
character.onclick = proxy(detectClick, this); 
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); 
    } 
} 
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); 
} 
}