Javascript TypeError:字符串不是函数

Javascript TypeError:字符串不是函数,javascript,string,object,instantiation,typeerror,Javascript,String,Object,Instantiation,Typeerror,在以下代码中,TypeError:string不是第30行的函数var myclour=new color(255255)被抛出。有人能看出代码有什么问题吗。非常感谢 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),

在以下代码中,
TypeError:string不是第30行的函数
var myclour=new color(255255)被抛出。有人能看出代码有什么问题吗。非常感谢

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);
};

for…in
循环中有一个名为
color
的局部变量,它不是函数。将该变量更改为构造函数以外的函数,如
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);
};​

局部变量
color
中定义的(颜色中的var COLOR)
将位于
onload
函数的开头,因此它将隐藏全局函数
color
。将后者更改为
颜色将解决您的问题。此外,将用作
名称的函数的名称大写是一种很好的约定

谢谢,效果很好。虽然我注意到了另一个问题。当循环遍历颜色数组时,我会得到“未定义”的值。你知道为什么吗?再次感谢。@Nate很确定这是因为你在
循环中为…使用了一个
。在数组上使用普通的
for
循环或
forEach
,这样就可以正常工作。我用了一个
forEach
你很合适。同时将
c.red
更改为
colors[c]。red
工作正常。干杯谢谢你。关于大写“类”函数名称的好提示