2011-08-10 47 views
0

的構建矩陣這是我的代碼:通過使用構造

var Evalcard = function(number) { 
    if (number == 1) { 
     this.name = "Ace"; 
     this.value = 11; 
    } 
    else if (number == 11) { 
     this.name = "Jack"; 
     this.value = 10; 
    } 
    else if (number == 12) { 
     this.name = "Queen"; 
     this.value = 10; 
    } 
    else if (number == 13) { 
     this.name = "King"; 
     this.value = 10; 
    } 

    return [this.name,this.value]; 
} 

var Buildmatrix = function(mat,suit) { 
    row = []; 
    var cardeval = new Evalcard(r); 
    for (r = 1;r <= 13;r++) { 
     cardeval(r); 
     row[r] = [r,cardeval(r)[0],suit,cardeval(r)[1]] 
     mat.push(row); 
    } 

    return row; 
} 

是我使用的構造這裏是否正確?我可以通過將參數放在新對象旁邊來調用Evalcard()的實例嗎?(在這種情況下爲var cardeval)?

+1

你需要爲eval選擇一個不同的名稱,是一個JavaScript函數 – Joe

+0

@ Joey - 謝謝,不知道 – dopatraman

回答

1

您的「Evalcard()」構造函數返回一個數組。你不能對數組進行函數調用;它沒有任何意義。

我想你想要的僅僅是:

function Buildmatrix(mat,suit) { 
    var row = []; 
    for (var r = 1;r <= 13;r++) { 
     var nameval = new Evalcard(r); // thanks @patrick dw 
     row[r] = [r,nameval[0],suit,nameval[1]] 
     mat.push(row); 
    } 

    return row; 
} 

(!還請注意,我重新添加缺少一些var關鍵字—不要忘了var

既然你返回一個數組無論如何,沒有理由把它當作構造函數。

+0

@ Pointy - 你能解釋一下我的代碼部分沒有意義嗎?你發佈的代碼與循環內調用'Evalcard()'的例外看起來差不多...... – dopatraman

+1

@Pointy:*「沒有理由把它當作構造函數」*除了他正在使用'this '在'Evalcard'函數中,所以如果你不用'new'來調用它,就會污染全局。 – user113716

+1

@codeninja:你的函數正在返回一個數組,但是當你使用'cardeval(r)'的時候,你將它視爲一個函數。這就像創建一個數組'var arr = [1,2,3];'然後試圖像一個函數'arr()'一樣調用它。它不會工作,因爲只能調用一個函數。 – user113716