2012-11-20 38 views
0

在這裏我有兩個「班」做卡和卡。卡基本上是與特定的一組方法:爲什麼不能運行此JavaScript?

  • 附加卡
  • 取出存儲卡
  • 排序和洗牌

卡被用於保持西裝的值並輸出字符串拼接對象都。

我在這裏的問題是試圖運行這個代碼,即按鈕單擊setup()。 我發現當我剛創建一張卡時,它仍然運行。我知道這是因爲輸出仍然會變成hello world。

但是,當我嘗試將卡片添加到卡片類或卡組時。腳本停止運行。我不知道這是爲什麼,我有一種感覺,它不喜歡我如何使用陣列。

這就是問題之一。

我的第二個問題是,當我

var temp= new card('c','2'); 
alert(temp.getvalue()); 

這也將失敗。

任何有關我在這裏做錯了什麼的洞察將有助於和讚賞。

function setup() { 
    var temp = new card('c', '2'); 
    var textbox = document.getElementById("output"); 
    textbox.value = "Hello, world!"; 
}; 

Array.prototype.shuffle = function() { 
    for (var i = this.length - 1; i > 0; i--) { 
     var j = Math.floor(Math.random() * (i + 1)); 
     var tmp = this[i]; 
     this[i] = this[j]; 
     this[j] = tmp; 
    } 

    return this; 
} 

function card(s, v) { 
    this.suit = s; 
    this.value = v; 

    this.getvalue = function() { 
     return (suit.toString() + value.toString()); 
    }; 

    this.getSortOrder = function() { 
     var factor; 
     if (this.suit == 'c') { 
      factor = 0; 
     } 
     else if (this.suit == 'd') { 
      factor = 1; 
     } 
     else if (this.suit == 'h') { 
      factor = 2; 
     } 
     else if (this.suit == 's') { 
      factor = 3; 
     } 
     else { 
      factor = -2; 
     } 

     return (this.value + 13 * factor); 
    }; 
}; 

function Cards() { 
    this.list = new Array(); 

    this.Addcard = function (c) { 
     list.push(c); 
    }; 

    this.removeCard = function (c) { 
     list.splice(list.indexOf(c), 1); 
    }; 

    this.lookat = function (i) { 
     return list[i]; 
    }; 

    this.sort = function() { 
     list.sort(); 
    }; 

    this.shuffle = function() { 
     list.shuffle(); 
    }; 

    this.prototype; 
}; 
+4

您在javascript開發控制檯中看到錯誤嗎? – Matt

+0

請每個問題提出一個問題。 – 0x499602D2

+3

Stackoverlow用戶不是調試器。 – gdoron

回答

1

這裏的一兩件事:

this.getvalue = function() { 

    return (suit.toString() + value.toString()); 

}; 

您需要訪問的西裝和價值這一點:

this.getvalue = function() { 

    return (this.suit.toString() + this.value.toString()); 

}; 

編輯:

有很多更像你的代碼(見Cards函數)。 Javascript不會自動將「this」放置在那裏,因爲它像其他語言一樣,因爲它沒有類,它有原型。

無論何時嘗試訪問「成員變量」,給它一些上下文,使用this

其他代碼風格提示:代碼與/*使用

  • [],而不是new Array()
  • 評論大塊和*/
  • 構造應該大寫(卡不卡)和功能應該是駱駝案例(addCard,而不是Addcard)
+0

謝謝,這很有道理,我原來並沒有這樣做,因爲我不知道這是否指的是指定類中的新函數,或者如果這個指的是指定的類。 –

+0

經驗法則,當這個函數調用函數'thing.func()'時,'this'就是這個點的左邊的任何東西,事情就是'func()'中的'this'。 90%的時間都是如此,除非使用「綁定」。 – tjameson