1. 程式人生 > >Uncaught TypeError: Cannot read property 'draw' of undefined

Uncaught TypeError: Cannot read property 'draw' of undefined

1.

來源自慕課網Daisy 的課程《canvas實現星星閃爍特效》,相關問題下面有我的回答

部分js指令碼如下

function init() {
    can = document.getElementById("canvas");
    ctx = can.getContext("2d");

    w = can.width;
    h = can.height;

    girlPic.src = "src/girl.jpg";
    starPic.src = "src/star.png";
    
    gameLoop();

    for (var i = 0; i < num; i++) {
        stars[i] = new starObj();
        stars[i].init1();
    }

}

function gameLoop() {
    window.requestAnimFrame(gameLoop);
    drawStars();
}

function drawStars(){
    for(var i=0;i<num;i++){
        stars[i].draw();
    }
}

紅色字型部分gameLoop()要放於for迴圈之後,放在前面就會提示Uncaught TypeError: Cannot read property 'draw' of undefined,因為陣列中的值要先初始化為starObj物件,才可以引用starObj物件的方法,即stars[i].draw();

2.

迴圈呼叫函式的三種方法以及區別:

requestAnimFram(function(){}); 依據電腦效能,來確定每次回撥的時間,提高效率,回撥時間可能不一樣

setTimeOut(function(){},time); 在定義的time時間之後,迴圈呼叫函式

setInterval(function(){},time); 先呼叫函式,在time時間之後第二次再呼叫

如果對你有用的話,給個讚唄~