2015-05-19 92 views
0

我還在這裏解決另一個Javascript enigma。JavaScript OOP函數引用尚未聲明

考慮以下代碼:

starmap = function(game){ 
 

 
    this.PI2 = Math.PI * 2; 
 
    this.renderer = { 
 
     ... 
 
    } 
 
    
 
    this.star = function (...) { 
 
     console.log(this.map); 
 
     ... 
 
    } 
 
     
 
    this.map = { 
 
     ... 
 
    } 
 
} 
 
    
 
starmap.prototype = { 
 

 
    preload: function(){}, 
 
    create : function(){ 
 
     this.map.initialize('starmap'); 
 
    }, 
 

 
    update: function(){ 
 
     
 
    } 
 
}

的map.initialize通話明星和明星裏面本身有引用映射,但是我越來越不被定義它的錯誤,當我開始。

現在我已經加入

var m = this.map 

權下的映射聲明解決了這個問題,但是這似乎有點古怪。 這樣做的正確方法是什麼?

謝謝!

+0

顯示'map.initialize'函數。 – radiaph

回答

0

嘗試分配「這個」正規的變量:

starmap = function(game){ 

    var self = this; //<---- 

    self.PI2 = Math.PI * 2; 

,然後用self取代的this所有用途。例如,self.map而不是this.map。在Javascript中使用this非常棘手,因爲它的值根據您稱爲當前函數的方式而變化。

+0

啊!這麼精彩的解決方案,太簡單了! 我沒有想到! – grumpyGAMER

+0

其非常常見的JS黑客攻擊。通常人們將變量命名爲「self」或「that」 – hugomg