2012-12-29 40 views
3

在以下代碼中,會引發第012行上的TypeError: string is not a functionvar myColour = new colour(255,255,255);。任何人都可以看到代碼有什麼問題。非常感謝。TypeError:字符串不是函數

var bodies = []; 
var orbits = []; 
var colours = [ 
    new colour(45, 45, 45), 
    new colour(255, 0, 0), 
    new colour(0, 157, 255), 
    new colour(77, 250, 81), 
    new colour(255, 247, 0) 
]; 

function colour(red, green, blue) 
{ 
    this.red = red; 
    this.green = green; 
    this.blue = blue; 
}; 

window.onload = function() { 
    var c = document.getElementById("theCanvas"); 
    var ctx = c.getContext("2d"); 
    ctx.beginPath(); 
    ctx.arc(95,50,40,0,2*Math.PI); 
    ctx.stroke(); 
    for (var colour in colours){ 
     console.log(colour.red); 
     console.log(colour.green); 
     console.log(colour.blue); 
    }; 
    var myColour = new colour(255,255,255); 
    console.log(myColour.red); 
    console.log(myColour.green); 
    console.log(myColour.blue); 
}; 

回答

7

你必須在for...in循環調用colour一個局部變量,而不是函數。將該變量更改爲構造函數以外的內容,例如c,它會正常工作。您的代碼,修正:

var bodies = []; 
var orbits = []; 
var colours = [ 
    new colour(45, 45, 45), 
    new colour(255, 0, 0), 
    new colour(0, 157, 255), 
    new colour(77, 250, 81), 
    new colour(255, 247, 0) 
]; 

function colour(red, green, blue) 
{ 
    this.red = red; 
    this.green = green; 
    this.blue = blue; 
}; 

window.onload = function() { 
    var c = document.getElementById("theCanvas"); 
    var ctx = c.getContext("2d"); 
    ctx.beginPath(); 
    ctx.arc(95,50,40,0,2*Math.PI); 
    ctx.stroke(); 
    for (var c in colours){ 
     console.log(c.red); 
     console.log(c.green); 
     console.log(c.blue); 
    }; 
    var myColour = new colour(255,255,255); 
    console.log(myColour.red); 
    console.log(myColour.green); 
    console.log(myColour.blue); 
};​ 

Demo

+0

謝謝,這很好。雖然我注意到了另一個問題。循環顯示顏色數組時,我會得到'未定義'值。任何想法爲什麼?再次感謝。 – Nate

+0

@Nate很確定這是因爲你正在使用'for ... in'循環。在數組上使用一個普通的'for'循環或'forEach',它可以正常工作。我已經使用了'forEach' [這裏](http://jsfiddle.net/RUBT7/2/) –

+0

你現在就在。同時將'c.red'改爲'colors [c] .red'的工作。歡呼聲 – Nate

3

局部變量colourfor (var colour in colours)定義將hoistedonload功能的開始,所以它會隱藏全局函數colour。將後者更改爲Colour將解決您的問題。此外,將名稱用作名稱的函數名稱是很好的約定。

+0

謝謝。使用'類'函數名稱的好建議 – Nate

相關問題