2016-03-14 143 views
0

我正在製作一個簡單的hmtl/js遊戲。我想要在DataofGame中獲得遊戲的所有數據。這就像網球一樣,比網球簡單:只有定型和比賽。 changeinSetclick上被調用。如何在類的實例中聲明類的實例?

但我想我有一個私人變量的問題,所以它不工作。 Uncaught TypeError: Cannot read property 'WordsoftheGame' of undefined

//Added 
    document.getElementById('playboutton').addEventListener('click', newGame); 

    function newGame() { 
     var DataofGame = new newGameData(); 
    } 

    // New game 
    function newGameData() { 

     this.pointTeam1 = 0; 
     this.pointTeam2 = 0; 
     this.WordsoftheGame = ShuffleListe(); 
     this.ASet = new aSet(); 
    } 

    //How the set is manage ******************** 

    function aSet() { 
     var oneWord = DataofGame.ListeMot; 
     // display the word and delete it from the list 
     document.getElementById('jouer').innerHTML = oneWord[0]; 
     DataofGame.WordsoftheGame.shift(); 
     this.turn = true; 
     this.score = 0; 
    } 

    function changeinSet() { 
     DataofGame.ASet.score += 1; 
     //This is the other team's turn: 
     DataofGame.ASet.turn = !DataofGame.ASet.turn; 

    }; 

    //shuffle liste 
    ListOfWords = ['Artiste', 'Appeler', 'Cheval', 'Choisir', 'Ciel', 'Croire', 'Dormir']; 

    function ShuffleListe() { 
     data = shuffle(ListOfWords); 
     return data; 
    } 
+0

這個問題是不是變量,問題是,你正在使用'this'時認爲不需要使用。你能展示你班級的完整代碼嗎? – Nadir

+0

謝謝。哪部分代碼沒有完全顯示? – Sulot

+0

可以在實例化對象之前解釋e ListOfWords? – Nadir

回答

1
function newGameData(){ 

    this.pointTeam1=0; 
    this.pointTeam2=0; 
    this.WordsoftheGame= ShuffleListe(); 
    this.ASet=new aSet(); 
} 

//How the set is manage ******************** 

function aSet(){ 
    var oneWord=DataofGame.ListeMot; 
    // display the word and delete it from the list 
    document.getElementById('jouer').innerHTML=oneWord[0]; 
    DataofGame.WordsoftheGame.shift(); // << DataofGame not assigned yet 
    this.turn=true; 
    this.score=0; 
} 

,當你訪問DataofGame在這裏,它尚未分配,因爲你是在構造函數中調用aSet()時。

你想達到什麼是不完全清楚,但如果它增加一個ASET方法你的對象,你可以寫這樣的事情:

function newGameData(){ 

    this.pointTeam1=0; 
    this.pointTeam2=0; 
    this.WordsoftheGame= ShuffleListe(); 
    this.ASet = function() { 
     // your code 
    }; 
} 

NB的編碼風格的名字是有點亂,你應該一直使用大號。用法是用大寫字母開始構造函數名稱,其餘的用小寫字母開頭。

+0

好的。我想我會創建2個對象。一個用於全部匹配'dataofgame'和一個用於該集合。好的編碼風格:我堅持http://www.w3schools.com/js/js_conventions.asp – Sulot

+0

正常方法(和var):'shuffleListe'。構造函數:'NewGameData'。施工人員應該堅持下去。 – Ilya