3

次のコードでは、TypeError: string is not a function30 行目var myColour = new colour(255,255,255);がスローされます。コードの何が問題なのか誰でもわかりますか。どうもありがとう。

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

2 に答える 2

7

ループで呼び出さcolourれたローカル変数があり、それは関数ではありません。for...inその変数をコンストラクター関数以外のものに変更すると、正常に機能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);
};​

デモ

于 2012-12-29T12:36:21.510 に答える
3

colourで定義されたfor (var colour in colours)ローカル変数は関数の先頭に引き上げonloadられるため、グローバル関数は非表示になりますcolour。後者をに変更するColourと、問題が解決します。また、名前として機能する関数の名前を大文字にすることをお勧めしますClass

于 2012-12-29T12:44:43.960 に答える