2011-08-10 46 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