2017-05-12 85 views
-2

我有幾個構造函數類的設置,我試圖彈出這個元素。出於某種原因,我不能。我可以打電話但我不能彈出它,我不知道爲什麼。我發佈完整的代碼(這是一個uno遊戲)。我認爲這可能與玩家在不同的構造函數中被調用的事實有關,但我使用了回調函數,所以我想我應該能夠改變它,因爲我可以執行所有的功能。我不能使用pop()? javascript

作爲替代方案,我可能會在播放器中創建一個允許彈出的函數,但我希望有一些洞察。

通過此代碼的一半是一個未編碼的行,我有問題。

function Card(color, value){ 
    this.color = color 
    this.value = value 
    var values = { 
    10: "Skip", // 2 per color 
    11: "Draw 2", //2 per color 
    12: "Reverse", //2 per color 
    13: "Wild", // 4 wilds 
    14: "Wild Draw Four" //4 of these 
    } 
    var color = ["Green", "Blue", "Yellow", "Red"] 
    if (values[this.value]){ 
    this.name = `${values[this.value]} of ${color[this.color]}` 
    } 
    else{ 
    this.name = `${this.value} of ${color[this.color]}` 
    } 
} 
function Deck(){ 
    this.deck = [] 
    this.pile = [] 
    for (var color = 0; color < 4; color ++){ 
    for (var value = 0; value <= 14; value++){ 
     this.deck.push(new Card(color, value)) 
    } 
    } 
    for (var color = 0; color < 4; color ++){ 
    for (var value = 1; value <=12; value++){ 
     this.deck.push(new Card(color, value)) 
    } 
    } 
    this.shuffle = function(){ 
    for (var i = 0; i<this.deck.length; i++){ 
     var j = Math.floor(Math.random()*this.deck.length) 
     var temp = this.deck[j] 
     this.deck[j] = this.deck[i] 
     this.deck[i] = temp 
    } 
    } 
    } 

function Player(hand, name, callname){ 
    this.hand = hand 
    this.name = name 
    this.callname = callname 
} 
function functioning_turns(players, my_deck){ 
    console.log(players); 
    for(var i = 0; i < players.length; i++){ 
    current = players[i] 
    console.log(current); 
    name_curr = players[i].name 
    top_pile = my_deck.pile[0].name 
    console.log('It\'s '+name_curr+ ' turn.') 
    for (var i = 0; i < current.hand.length;i++){ 
     console.log(current.hand[i].name); 
    } 
    function play_card(){ 
     var ploy = prompt("Please enter card position to play: 0-N (n is number of cards)\n\nTop of pile: "+ top_pile, "Starts at zero"); 
     console.log(current.hand[ploy]); 

略低於此行中我不能讓元素的流行,我可以打電話 current.hand [策略]

 console.log(current.hand[ploy].pop())}; 
    // if(this.hand[play] == 'skip' || 'Skip'){ 
    // 
    // } 
    play_card() 
    } 
    } 
function start_game(){ 
    var playernames = [] 
    var num_of_players = prompt("Please enter number of players", "4") 
    var my_deck = new Deck() 
    my_deck.shuffle() 
    var x = 1 
    while (x <= num_of_players){ 
    var player_names = prompt("Please enter player name", "shawn"); 
    curr_hand = [] 
    my_deck.deal = function(){ 
     return curr_hand.push(my_deck.deck.pop())} 
    for(var i = 0; i<7; i++){ 
     my_deck.deal(); 
     } 
    newplayer = player_names+x 
    newplayer = new Player(curr_hand, player_names, newplayer); 
    playernames.push(newplayer); 
    x++; 
    } 
    my_deck.pile.push(my_deck.deck.pop()) 
    console.log(my_deck.deck); 
    var game = new functioning_turns(playernames, my_deck) 
} 
start_game() 
+2

什麼是「不能彈出」呢?有錯誤嗎? – Ryan

+0

你爲什麼不解釋你想要做什麼以及實際發生了什麼。 「不能」是什麼意思? –

+2

當前未聲明。這是一個隱含的全球性。在你的文件的最上面加上''use strict';''。 –

回答

1

如果我理解你的問題很好,你想打電話Array.prototype.pop()在一個字符串...

這工作:

var arr = ['a', 'b', 'c']; 
 

 
arr.pop(); 
 

 
console.log(arr);

這是不行的,當然:

var arr = ['a', 'b', 'c']; 
 

 
arr[1].pop(); // TypeError 
 

 
console.log(arr);