首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript push()失败

javascript push()失败
EN

Stack Overflow用户
提问于 2012-06-05 01:05:39
回答 3查看 182关注 0票数 1

我试图将卡片添加到Deck对象中的数组中,但由于某种原因,push()失败了。我之前已经让它工作了,但在做了一些改变后,我实际上把它搞砸了。( "testX“写入是为了调试目的)

代码语言:javascript
复制
<!DOCTYPE HTML>
<html>
<head>
<style> 
  #myCanvas {
    border: 1px solid #9C9898;
  }
  body {
    margin: 0px;
    padding: 0px;
  }
</style>
<script type="text/javascript">
<!--
//draws the game
window.onload = function() { 
    var canvas = document.getElementById("myCanvas"); 
    var context = canvas.getContext("2d"); 

    //draws the rectangles that will be the card        
    var cardHeight = 125,
        cardWidth = 80;

    context.beginPath();  

    //draws the top row of 5 cards  
    for(var x=0;x<5;x++){
        context.rect(10+(x*(cardWidth+10)),10,cardWidth,cardHeight);
    }

    //draws the bottom row of 5 cards
    for(x=0;x<5;x++){
        context.rect(10+(x*(cardWidth+10)),150,cardWidth,cardHeight);
    }

    //draws the deck
    context.rect(10+5*cardWidth+65,(150-10)/2,cardWidth,cardHeight);

    context.fillStyle = 'white';
    context.fill();
    context.lineWidth = 2;
    context.strokeStyle = 'black';
    context.stroke();   
};


function Deck(){
    //creates the unshuffled deck (loadedDeck) once to make the shuffling process faster
    var loadedDeck = new Array(),
        realDeck;

    this.loadTheDeck = function(){ //method 

        for(x=1;x<=13;x++){ 
            this.loadedDeck.push(x+" Spades"); //<---issue line (all 4 are failing though this is the first)
            this.loadedDeck.push(x+" Clubs");
            this.loadedDeck.push(x+" Hearts");
            this.loadedDeck.push(x+" Diamonds");
        }
        document.write(this.loadedDeck);
    };
    this.loadTheDeck(); //creates the unshuffled deck when the Deck is instantiated


    //resets the deck and randomizes
    this.shuffle = function(){ //method 

        //creates the real deck
        this.realDeck = this.loadedDeck;

        //write shuffle function
    };
    this.shuffle(); //shuffles the Deck when instantiated
}

document.write("test-1");
var myDeck = new Deck();
document.write("test0");
document.write(this.realDeck);
document.write("test1");    
-->
</script>
 </head>
 <body>
<canvas id="myCanvas" height="300" width="600"></canvas>

 </body>
 </html>

以下是代码的演示:http://jsfiddle.net/NfmsR/2/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-05 01:11:04

当您运行此行时:

代码语言:javascript
复制
this.loadedDeck.push(x+" Spades");

您正在使用this.loadedDeck数组。您是否已将其定义为Deck对象的一部分?不是:

代码语言:javascript
复制
var loadedDeck = new Array(),
    realDeck;

将声明更改为以下内容,它应该会起作用:

代码语言:javascript
复制
this.loadedDeck = []; // I'd use [] instead of new Array().
this.realDeck = [];

正如@j08691指出的那样,您还需要将realDeck更改为this.realDeck,因为您在这里的调用方式与此类似:

代码语言:javascript
复制
this.shuffle = function(){ //method 

    //creates the real deck
    this.realDeck = this.loadedDeck;

    //write shuffle function
};
票数 4
EN

Stack Overflow用户

发布于 2012-06-05 01:08:44

你引用"loadedDeck“就好像它是你的"Deck”对象的属性。它不是;它只是构造器闭包的一个局部变量。

就叫它"loadedDeck“吧,看看有没有帮助。"realDeck“也是如此。

代码语言:javascript
复制
this.loadTheDeck = function(){ //method
    for(var x=1;x<=13;x++){ 
        loadedDeck.push(x+" Spades"); //<---issue line (all 4 are failing though this is the first)
        loadedDeck.push(x+" Clubs");
        loadedDeck.push(x+" Hearts");
        loadedDeck.push(x+" Diamonds");
    }

另外,改掉滥用document.write进行调试的习惯也是个好主意。也不要忘了用var声明像"x“这样的东西!

票数 2
EN

Stack Overflow用户

发布于 2012-06-05 01:11:24

您的Deck对象是通过this访问的,它没有"loadedDeck"-property。loadedDeck是一个局部变量。只需删除"this.“即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10885192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档